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
Другие вопросы по тегам