nginx重定向忽略斜杠

时间:2015-02-21 03:20:51

标签: regex redirect nginx

我有一些看起来像这样的网址:

http://www.mywebsite.com/stuff/web-design-development

http://www.mywebsite.com/web-design/

http://www.mywebsite.com/web-design/secondary-page

基本上,我需要/ web-design中的任何内容,包含或不包含斜杠,并包含重定向到/的斜杠(如第三个URL)之后的任何内容。但我遇到的问题是我的重定向会影响第一个网址,因为它中包含“网页设计”。

这就是我所拥有的:

if ($request_filename ~ web-design/.+) {
    rewrite ^(.*) http://www.mywebsite.com permanent;
}

我知道如何纠正这个问题吗?

2 个答案:

答案 0 :(得分:1)

一个简单的位置块将匹配所有这些

location /web-design {
  return 301 $scheme://www.mywebsite.com;
end

这将匹配启动/web-design的所有内容并重定向。

以下是why return and not rewrite,此处是location directive文档。

另请注意,301响应是可缓存的,如果您遇到奇怪的行为,请考虑清除缓存,因为当配置不正确时,您的浏览器可能会缓存旧的301.

答案 1 :(得分:0)

我能够通过简化我的重写来解决这个问题。

而不是使用if语句,我只是做了:

rewrite ^/web-design/?$ http://www.mywebsite.com/ permanent;