我使用的是 Nginx 1.6.2。我读到 if () 是邪恶的,使用它不好,所以我需要一些帮助,因为如果不使用 if() 我就无法做我想做的事。我将发布我的 if 规则,并询问是否有人可以帮助我并告诉我如何不使用 if () 并使用其他东西并获得相同的结果。
# REDIRECT NON-WWW TO WWW.
if ($http_host != "www.site.eu") {
rewrite ^ http://www.site.eu$request_uri permanent;
}
# REMOVE INDEX FILES FROM URL FOR SEO PURPOSE.
if ($request_uri ~ "/index.php") {
rewrite ^ /$1 permanent;
}
# REMOVE ANY MULTIPLE SLASHES IN THE URL.
if ($request_uri ~* "\/\/") {
rewrite ^/(.*) $scheme://$host/$1 permanent;
}
第一条规则应替换为单独的服务器块
server {
listen 80 default_server;
return 301 http://www.example.com$request_uri;
}
server {
listen 80;
server_name www.example.com;
# normal config
}
其他
if
通常是不必要的。只要不要生成带有 index.php
的链接,您就不需要删除它。
您可以更换此块
# REMOVE INDEX FILES FROM URL FOR SEO PURPOSE.
if ($request_uri ~ "/index.php") {
rewrite ^ /$1 permanent;
}
有了这个
location ~ ^/index.php/(.*[^/])$ { return 301 $scheme://$host/$1/$is_args$args; }
location ~ ^/index.php/(.*)/$ { return 301 $scheme://$host/$1/$is_args$args; }
我也不认为你需要担心 double // 的最后一个规则,因为默认情况下 nginx 在到达匹配位置块之前会自动处理这个问题