在多个条件/规则实施时,避免在NginX中重定向链?

时间:2016-09-07 15:43:25

标签: .htaccess redirect nginx chain

对不起,我真的很傻我必须做的事情,所以这个问题可能是愚蠢的。 我将我的网站从Apache移动到NginX。所以我必须将.htacess重定向转移到NginX conf。所以,我找到了一个好转换器,单一规则工作正常。但是一旦我尝试实现几个,就会发生这样的事情。例如,两个步骤: 1.WhWW - >万维网 2.从URI

中删除index.php

在.htaccess中它可以正常工作 mysite.com/index.php?p=123 - > (301)www.mysite.com/?p=123 ,一次,一次重定向。

但是在NgonX中我做了相同的规则,它起到了链条的作用:

site.ru/index.php?p=123 - > (301)site.ru/?p=123 - > (301)www.site.ru/?p=123 这是完全错误的,因为我认为。

我希望我只是愚蠢并跳过一些标准和简单的程序,例如"放在括号中#34;一些条件和规则,以避免链...请告诉我什么错?或者我的方式只是忘记NginX。

我是如何做到这个例子的:

# non-WWW to WWW
if ($http_host !~ "^$"){
set $rule_0 1$rule_0;
}
if ($http_host !~* "^www."){
set $rule_0 2$rule_0;
}
if ($http_host ~ "(.+)$"){
set $rule_0 3$rule_0;
set $bref_1 $1;
}
if ($rule_0 = "321"){
rewrite ^/(.*) http://www.$bref_1/$1 permanent;
}

# remove index.php string from URL
if ($uri ~ "^/index.php$"){
set $rule_0 1$rule_0;
}
if ($rule_0 = "1"){
rewrite /. / permanent;
}

以上情况根本不起作用,在非自愿之后 - > WWW它停止并且index.php删除不起作用。

# non-WWW to WWW
if ($http_host !~ "^$"){
set $rule_0 1$rule_0;
}
if ($http_host !~* "^www."){
set $rule_0 2$rule_0;
}
if ($http_host ~ "(.+)$"){
set $rule_0 3$rule_0;
set $bref_1 $1;
}
if ($rule_0 = "321"){
rewrite ^/(.*) http://www.$bref_1/$1 permanent;
}

# remove index.php string from URL
if ($uri ~ "^/index.php$"){
set $rule_0 1$rule_0;
}
if ($rule_0 = "1"){
rewrite /. / permanent;
}

这可以作为一个链......

1 个答案:

答案 0 :(得分:0)

将非www重定向到www。许多来源(包括official wiki)方式建议 - 具有重定向的不同服务器:

server {
    server_name example.com;
    return 301 $scheme://www.example.com$request_uri;
}
server {
    server_name www.example.com;
    ....
}

删除索引

server {
    server_name www.example.com;
    ....
    location / {
        rewrite ^/index\.php$ / permanent;
        ....
    }
}