您好,我在 nginx 中有以下配置:
if (!-e $request_filename)
{
rewrite ^/([a-zA-Z0-9_-]+)/ /$1.php;
rewrite ^/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/ /$1.php?$2=$3;
rewrite ^/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/ /$1.php?$2=$3&$4=$5;
}
它没有按预期工作。基本上,我想要做的是,如果有人请求 www.example.com/request/test/value,那么仅当 request.php 存在时才会调用 request.php?test=value,我希望系统地对数百个文件执行此操作,而不仅仅是我在此示例中使用的 request.php。此外,人们应该能够访问 /request 并到达 request.php(我已经实现了)
答案1
虽然我同意迈克尔的评论,但你可以尝试这样的事情:
location ~ ^(?<phpfile>[a-zA-Z0-9_-]+)/ {
try_files $uri $phpfile.php;
}
location ~ ^(?<phpfile>[a-zA-Z0-9_-]+)/(?<arg1>[a-zA-Z0-9_-]+)/(?<val1>[a-zA-Z0-9_-]+)/ {
try_files $uri $phpfile.php?$arg1=$val1;
}
在这里我们使用正则表达式捕获将 URI 的不同部分捕获到变量,然后将其用于指令try_files
。
我还没有测试过这种方法,所以不确定它是否有效。如果try_files
似乎不起作用,您可以在位置内尝试此方法:
if (!-e $request_filename) {
if (-e $phpfile.php) {
rewrite ^ $phpfile.php;
}
}