我有以下网址:
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中执行此操作的正确方法吗?在研究这个时,我没有在任何地方看到过这种重写规则格式。它似乎很奇怪。
答案 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;
}