以下是我现在所拥有的,它可以工作,但需要一些改进。我猜我需要使用正则表达式,这就是我需要帮助的原因。
我需要的是这个
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;
}
答案1
rewrite
你需要重写模块以及正则表达式来执行路径的内部重写。块内部的类似操作location /
应该可以工作。
rewrite ^/([^./]+)/(.*) /$1.php/$2 last;
您还需要修改 PHPlocation
块的正则表达式来匹配.php
路径中间的文件,因此如下所示:
location ~ \.php(/|$)
答案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;
}