2015-12-14 3 views
0

Я переместил сайт Yii 1 на новый сервер Ubuntu с NGINX, и все работает отлично, за исключением очищенных URL-адресов без части index.php. Например, страница http: // ****/site/о переадресации на главную страницу, но http: //****/index.php/site/about показывает правильную страницу. Мой текущий файл конфигурации блока сервера содержит данные правила местоположение:Yii remove index.php from url on NGINX

location/{ 
    try_files $uri $uri/ /index.php?$args; 
} 

location ~ \.php$ { 
    include fastcgi_params; 
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
    fastcgi_param PATH_INFO $fastcgi_script_name; 
    fastcgi_param QUERY_STRING $query_string; 
    fastcgi_pass unix:/var/run/php5-fpm.sock; 
} 

Я также попытался с помощью

try_files $uri $uri/ /index.php$uri?$args; 

, но в конечном итоге с петлей перенаправления.

Кажется, что переписать /index.php$uri?$args никогда не проверяет проверку $ uri.

В Yii конфигурации У меня есть

'urlManager' => array (
      'urlFormat' => 'path', 
      'showScriptName' => false, 
      'caseSensitive' => false, 
      'rules' => array (
       '<public_url:about>'=>'site/about', 
       '<controller:\w+>/<id:\d+>' => '<controller>/view', 
       '<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>', 
       '<controller:\w+>/<action:\w+>' => '<controller>/<action>', 
       .... 

Таким образом, вопрос в том, как сделать HTTP: // ****/сайт/о шоу той же странице, как HTTP: // ****/индекс. php/site/о запросе?

Заранее спасибо.

+0

см. Http://www.yiiframework.com/doc/guide/1.1/en/quickstart.apache-nginx-config –

ответ

0

Кажется, что переписать /index.php$uri?$args никогда не проверяет на $ uri .

Номер location \.php$ соответствует только URI, заканчивающимся .php. После добавления информации о пути она больше не соответствует.

Правильный способ обработки PHP скриптов с информацией пути, чтобы заменить завершающий $ с (/|$) и использовать fastcgi_split_path_info директивы, чтобы отделить данные пути от имени пути сценария. См. this document.

+0

Почему тогда прямой запрос http: //****/index.php/ сайт/информация обрабатывается правильно? Изменение местоположения в \ .php (/ | $) ничего не изменило в моем случае. 'location ~ * \ .php (/ | $) { fastcgi_split_path_info^(. +? \. Php) (/.*) $; включают fastcgi_params; fastcgi_param SCRIPT_FILENAME $ document_root $ fastcgi_script_name; fastcgi_param PATH_INFO $ fastcgi_script_name; fastcgi_pass unix: /var/run/php5-fpm.sock; } ' –

+0

Это работает, потому что оно переписано'/index.php' блоком 'location /'. –

+0

Почему вы устанавливаете PATH_INFO на имя скрипта? Вы все равно должны использовать '$ fastcgi_path_info'. –

Смежные вопросы