如果是邪恶的-Nginx

如果是邪恶的-Nginx,nginx,configuration,Nginx,Configuration,我正在使用nginx1.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; } # REM

我正在使用nginx1.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;
}
它说有些情况是可以的。请看下面的报价:

如果在适当的位置,唯一可以在室内完成的100%安全的事情 背景是:

返回。。。;重写。。。最后

在介绍的最后,有一个例子,它还具有一个重写命令。所以你的代码看起来也不错

编辑:你也应该看看。

它说有些情况是可以的。请看下面的报价:

如果在适当的位置,唯一可以在室内完成的100%安全的事情 背景是:

返回。。。;重写。。。最后

在介绍的最后,有一个例子,它还具有一个重写命令。所以你的代码看起来也不错


编辑:您还应该看看。

第一条规则应该用单独的服务器块替换

server {
    listen 80 default_server;
    return 301 http://www.example.com$request_uri;
}

server {
    listen 80;
    server_name www.example.com;

    # normal config
}

通常不需要使用其他
if
s。只需不使用
index.php生成链接,您就不需要删除它。

第一条规则应替换为单独的服务器块

server {
    listen 80 default_server;
    return 301 http://www.example.com$request_uri;
}

server {
    listen 80;
    server_name www.example.com;

    # normal config
}

通常不需要使用其他
if
s。只要不使用
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默认情况下会在匹配位置块之前自动处理该规则

您可以替换该块

# 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默认情况下会在匹配位置块之前自动处理该规则

第一个块应该由单独的服务器块替换。99%的人不需要第二个和第三个cases@Alexey十-你认为mena是什么,第一个块应该被separete服务器块替换,你所说的separete服务器块,server{}是什么意思?我不明白你的意思,你能给我正确的规则吗?你的第一条规则应该按照Alexey Ten的建议来处理。第二条规则有点毫无意义,如果真的需要,需要在Alexey的“normal config”服务器块下重新构造。第三个规则由nginx自动处理,完全不需要。第一个块应该由单独的服务器块替换。99%的人不需要第二个和第三个cases@Alexey十-你认为mena是什么,第一个块应该被separete服务器块替换,你所说的separete服务器块,server{}是什么意思?我不明白你的意思,你能给我正确的规则吗?你的第一条规则应该按照Alexey Ten的建议来处理。第二条规则有点毫无意义,如果真的需要,需要在Alexey的“normal config”服务器块下重新构造。第三条规则由nginx自动处理,完全不需要。谢谢你,最后一条规则是需要的,因为如果它不在那里,double//仍然会出现。出于某些原因,nginx不会像您所说的那样自动删除它。为此,需要最后一条规则,因为如果它不在那里,double//仍然会出现。出于某些原因,nginx不会像您所说的那样自动删除它。