Нужно пользовательское регулярное выражение Nginx
Вот что я имею сейчас, и это работает, но нуждается в некотором улучшении. Я предполагаю, что мне нужно будет использовать регулярные выражения, и поэтому мне нужна помощь.
Что мне нужно это
http://www.example.com/filename/segment1/segment2/?argk=argv
перейти к этому:
http://www.example.com/filename.php/segment1/segment2/?argk=argv
Следующие работы без сегментов. index.php работает как положено
location / {
try_files $uri $uri.php?$args;
}
location ~ \.php$ {
try_files $uri $uri/ /index.php?$args;
include fastcgi_params;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# fastcgi_intercept_errors on;
fastcgi_pass unix:/tmp/php.socket;
}
Материал, который я попробовал:
if (!-e $request_filename)
{
rewrite ^/([^?]*[^?/])/?(\?.*)?$ /$1.php/$2 last;
break;
}
if (!-e $request_filename)
{
rewrite ^/([^./]+)/(.*) /$1.php/$2 last;
break;
}
2 ответа
location ~ ^(/[^/]+)(.*)$ {
try_files $uri $1.php$2$is_args$args;
}
location ~ ^(.+\.php)(/.*)?$ {
try_files $uri /index.php?$args;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$1;
fastcgi_param SCRIPT_NAME $1;
fastcgi_param PATH_INFO $2;
# fastcgi_intercept_errors on;
fastcgi_pass unix:/tmp/php.socket;
}
Вам понадобится rewrite
директива от модуля перезаписи вместе с регулярным выражением для выполнения внутренней перезаписи пути. Как-то так внутри location /
блок должен работать.
rewrite ^/([^./]+)/(.*) /$1.php/$2 last;
Вам также необходимо изменить регулярное выражение вашего PHP location
блок для соответствия .php
файлы в середине пути, так что-то вроде этого:
location ~ \.php(/|$)