Как удалить index.php из URL-адресов Yii в Apache/Centos?

Я работаю с Yii Framework на сервере Apache/2.2.15 (CentOS).

Следующая строка раскомментирована в /etc/httpd/conf/httpd.conf

LoadModule rewrite_module modules/mod_rewrite.so

Я могу видеть mod_rewrite в Загруженный модуль, когда я выполняю

Структура проекта Yii:

/var/www/test/ 
/var/www/test/index.php 
/var/www/test/.htaccess

.htaccess

RewriteEngine on
# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# otherwise forward it to index.php
RewriteRule . index.php

Он отлично работает, когда я делаю:

http://10.20.30.40/test/index.php/testcontroller/testaction

Но когда я это делаю:

http://10.20.30.40/test/testcontroller/testaction

Отображается следующая ошибка:

Not Found
The requested URL /var/www/test/index.php was not found on this server.

Любая идея?

4 ответа

У меня такая же проблема. Я использую псевдоним конфигурации Apache, например:

<virtualhost *:80="">
...
Alias /project "/Users/foo/Sites/project"
...
</virtualhost>

Чтобы решить, я использую директиву "RewriteBase" на .htaccess, например:

RewriteEngine on
RewriteBase /project # <---- Modify here! and remove this comment.
# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# otherwise forward it to index.php
RewriteRule . index.php

Источник: http://www.yiiframework.com/wiki/214/url-hide-index-php/#c9725


Options +FollowSymLinks
IndexIgnore */*
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php

Содержимое htaccess.

'urlManager' => array(
 'urlFormat' => 'path',
 'showScriptName' => false,
 'rules' => array(
 '<controller:\w+>/<id:\d+>' => '<controller>/view',
 '<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
 '<controller:\w+>/<action:\w+>' => '<controller>/<action>'),
</action></controller></action:\w+></controller:\w+></action></controller></id:\d+></action:\w+></controller:\w+></controller></id:\d+></controller:\w+>

Конфигурация urlmanager в вашем main.php. Или вы можете настроить его, если хотите.


Убедитесь, что AllowOverride является "Все" для вашего веб-каталога проекта в httpd.conf. Если нет, измените значение и перезапустите веб-сервер


Я решил это изменить файл конфигурации Apache по адресу: {{ApacheDir}}/conf/httpd.conf И Un-commenting/Добавление следующей строки: LoadModule rewrite_module modules/mod_rewrite.so

licensed under cc by-sa 3.0 with attribution.