нужно сделать редирект с /index.php[/.*] на /(1)
чтобы http://site.ru/index.php/my_product_page редиректило на http://site.ru/my_product_page
showScriptName=>false в конфиге - это понятно, но если такие ссылки уже проиндексированы, нужно отдавать 301
средствами nginx это оказалось не так-то просто, потому что на index.php идет внутренний редирект, и просто написать location /index.php {return 301 /;} нельзя - получается рекурсия.
решил вот так:
Это интересно:
* вызов include fastcgi_params; не получается вынести на уровень server;
* при передаче обработки вызова на именованный location через try_files false @php; значения переменных ($fsn) сохраняются, а на обычный, вида try_files $uri /index.php - идет обработка директив set, которые стоят в контексте server.
чтобы http://site.ru/index.php/my_product_page редиректило на http://site.ru/my_product_page
showScriptName=>false в конфиге - это понятно, но если такие ссылки уже проиндексированы, нужно отдавать 301
средствами nginx это оказалось не так-то просто, потому что на index.php идет внутренний редирект, и просто написать location /index.php {return 301 /;} нельзя - получается рекурсия.
решил вот так:
Код:
server {
server_name localhost vm;
root /www;
set $yii_bootstrap "index.php";
set $fsn false;
location / {
#unexisting file
index /index;
try_files $uri @php;
}
location ~ ^/index.php/?(.*)? {
return 301 /$1;
}
location ~ \.php {
fastcgi_split_path_info ^(.+\.php)(.*)$;
set $fsn $fastcgi_script_name;
try_files false @php;
}
location @php {
if ($fsn = false){
set $fsn /$yii_bootstrap;
}
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fsn;
fastcgi_pass 127.0.0.1:9000;
}
}
* вызов include fastcgi_params; не получается вынести на уровень server;
* при передаче обработки вызова на именованный location через try_files false @php; значения переменных ($fsn) сохраняются, а на обычный, вида try_files $uri /index.php - идет обработка директив set, которые стоят в контексте server.
Последнее редактирование: