我使用以下代码删除了 Nginx 服务器上 PHP 文件末尾的“.php”后缀,但这次我无法向服务器发送一些数据。
try_files $uri/ $uri.html $uri.php$is_args$query_string;
网站上的一些链接是通过 Ajax 发送的,这些链接末尾没有“.php”扩展名。例如;https://panel.example.com/app/controller/ajax/collect
例如,当我想通过 Ajax 或直接访问“/collect”文件时,我收到错误“文件未找到”。因为我用下面的代码“重写”并提供了一个干净的 URL。
rewrite ^/([^/]+)/([^/]+)?$ /index.php?cmd=$1&scd=$2 last;
rewrite ^/([^/]+)/?$ /index.php?cmd=$1 last;
示例链接:https://panel.example.com/[details|cat|profile]/[subPages(productID, username..)]
结果,上述代码正确且可以运行,但不能同时运行。我怎样才能同时运行这两个代码?
答案1
您可以尝试以下方法:
location ~ ^/(?<cmd>[^/]+)/(?<scd>[^/]+) {
try_files /index.php?cmd=$cmd&scd=$scd =404;
}
location ~ ^/(?<cmd>[^/]+)/ {
try_files /index.php?cmd=$cmd =404;
}
location / {
try_files $uri/ $uri.html $uri.php$is_args$args;
}
我们在这里使用 nginx 位置匹配算法,首先检查 URL 是否与正则表达式匹配,然后对该 URL 采取适当的操作。
我在这里使用命名捕获?<cmd>
以使变量名更加清晰。
另外,?$
正则表达式末尾的部分也被删除了,因为这没什么区别。?$
和 空 都匹配任何字符串。