基本上我想要做的是将请求的 URL 放入变量中,然后删除一个字符(如 /)并获取一个新变量。
我正在尝试在 URL 末尾实现尾部斜杠;这可行,但我想对所有文件都执行此操作:
location /examplehtmlfile/ {
try_files = $uri $uri/ examplehtmlfile.html
}
否则,如果我在末尾添加一个斜杠,就会产生 404 错误。
所以我想要做的是向 try_files 指令(针对主要/位置)添加如下内容:
try_files = $uri $uri/ /$uriwithoutslash.html /$uriwithoutslash.php
谢谢
答案1
$uri
如果变量末尾有斜杠,则需要重写变量。这是内部重写因此它不会影响向您的客户显示的 URL。
location ~ ./$ { rewrite ^(.+)/$ $1 last; }
您的主要位置只能测试静态内容的存在。PHP 文件需要在不同的位置块中处理。
location / {
try_files $uri $uri.html $uri/index.html @php;
}
可以在指定位置测试 PHP 文件是否存在:
location @php {
try_files $uri.php $uri/index.php =404;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass ...;
}
可以=404
用默认 URI 替换,例如:/index.php
root
还需要指令,但没有index
参考指令。
编辑:
如果您也需要使用.php
扩展来支持 URI,您可以重写它们并添加斜线或复制 PHP 位置块。以下任一方式:
location ~ \.php$ {
rewrite ^(.*)\.php$ $1/ last;
}
或者:
location ~ \.php$ {
try_files $uri =404;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass ...;
}
答案2
感谢@RichardSmith,问题已经解决了!
这是我的最终配置:http://pastebin.com/TdAz9ad9