Yii:: Проблема с использованием Showscriptname = False And Url Manager
В настоящее время у меня есть проблема с использованием менеджера URL и / или apache mod_rewrite или, может быть, что-то еще полностью.
Если для параметра showScriptName установлено значение false, при переходе по таким адресам, как domain.com/login, domain.com/logout, domain.com/site/login, все происходит одинаково. Он просто показывает основной сайт / индекс, как если бы я должен был перейти на domain.com/eeofjew9j8jfdedfmewf (jibberish).
Может быть, это проблема с моими настройками Yii? Вот те (извините за небрежность):
'components'=>array(
'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>',
'login'=>'site/login',
'logout'=>'site/logout',
'register'=>'users/register'
),
,...
Вот как у меня есть.htaccess в корне www:
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
Я использую VPS-сервер, поэтому у меня есть root-доступ для внесения любых изменений, необходимых для apache. Я проверил свой phpinfo, и mod_rewrite запущен и включен. В моем конфиге apache у меня есть для моей директории www:
AllowOverride All
Options Indexes FollowSymLinks MultiViews
Order allow,deny
Allow from all
Я почесал голову над этой проблемой через 3 разных хоста (godaddy, dreamhost и lithiumhosting), поэтому я предполагаю, что это проблема с моей стороны в этом. Теперь, когда у меня есть VPS, я надеюсь, что смогу наконец выяснить свою проблему и решить ее.
3 ответа
Сначала убедитесь, что сервер анализирует файл.htaccess. Это просто сделать, поместив произвольный текст в файл.htaccess, такой как
CREATE AN ERROR
Если это приводит к ошибке сервера, файл анализируется. Возможно, вам придется переместить файл.htaccess вверх в каталог, чтобы заставить это работать.
После того, как это сработает, убедитесь, что модуль перезаписи в Apache включен. Сначала проверьте phpinfo и найдите работающий модуль. Если нет, возможно, вам придется удалить символ комментария (#) перед модулем.
После того, как модуль появится в phpinfo, посмотрите, можете ли вы выполнить базовую перезапись, чтобы убедиться, что нет проблем с Apache.
RewriteEngine on
RewriteRule ^ http://google.com/? [L,R]
Если это не работает, попробуйте добавить
Options +SymLinksIfOwnerMatch
в файл
Как только у вас есть Apache, он делает это, теперь дело за yii. Этот код:
RewriteEngine On
RewriteBase /mybasedirectory
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\?*$ index.php/$1 [L,QSA]
добавляет опцию перезаписи базы, которая может быть необходима, если у вас нет файлов в корне документа, таких как htdocs
наконец, если это не решит проблему, ограничьте свое правило простым правилом, таким как
'contact'=>'site/contact',
и посмотрим, перенаправит ли, по крайней мере, туда, куда, по вашему мнению, следует. Конечно, вам, возможно, придется проверить основные правила.htaccess еще раз, чтобы убедиться, что переопределение разрешено и нет ошибочного.htaccess в подкаталоге. Надеюсь, это поможет. Я наконец получил свою работу.
Если вы добавите этот код, посмотрите, работает ли он
'<action:(login|logout|register|contact)>' => 'site/<action>',
Что произойдет, если вы удалите эти строки!
enter code here
# otherwise forward it to index.php
RewriteRule . index.php