如何将nginx中的URL重写到更新的位置?

时间:2014-03-25 17:05:42

标签: nginx rewrite

我有以下网址:

1) http://example.com/downloads/
2) http://example.com/downloads/widgets
3) http://example.com/downloads/gadgets

这些网址需要重定向重写为以下内容:

1) http://example.com/products/
2 & 3 & etc) http://example.com/products/thingies

我正在尝试以下nginx代码:

location ~* ^/downloads/ {
    rewrite ^/downloads/$ /products break;
    rewrite ^/downloads/(.*)$ /products/thingies break;
}

几乎正在工作,但我网站的文档根目录是/var/www/example.com/public。因此,在处理重写规则之后,nginx尝试逐字服务/var/www/example.com/public/products/,而我想要它只需重写为http://example.com/products/(然后代理PHP等等)。< / p>

我在哪里失败?是否有不同的,更好的方法来实现这一目标?

感谢您的帮助。

- 更新 -

我使用以下规则让它工作:

重写^ / downloads /?$ $ scheme:// $ host / tools last;

location ~* ^/downloads/ {
    rewrite ^/downloads/?$ $scheme://$host/products last; 
    rewrite ^/downloads/(.*)$ $scheme://$host/products/thingies last;
}

这是在nginx中执行此操作的正确方法吗?在研究这个时,我没有在任何地方看到过这种重写规则格式。它似乎很奇怪。

2 个答案:

答案 0 :(得分:1)

您的更新会重定向,而不是重写。

我将如何做:

location /downloads/ {
    rewrite ^ /products/thingies;
}

location = /downloads/ {
    rewrite ^ /products/;
}

# uncomment if you need '/downloads' (without trailing slash) act as '/downloads/'
#location = /downloads {
#    rewrite ^ /products/;
#}

答案 1 :(得分:0)

正确的语法似乎是:

location ~* ^/downloads/ {
    rewrite ^/downloads/?$ /products permanent; 
    rewrite ^/downloads/(.*)$ /products/thingies permanent;
}