我正在尝试重写此网址(是的,网址有问号):domain.com/blog/blogdetail?id=20
:domain.com/train/my-page
这是我目前所拥有的,但它不起作用:
location /blog {
rewrite ^/blog/blogdetail(.*)id=20$ $scheme://$host/train/my-page permanent;
}
我不确定是什么问题。我已尝试使用location /blog/
并转义正则表达式中的/。
我缺少什么想法或其他方式去做?基本上我有一堆具有特定id#的页面,我需要将它们重写为各自的“基于单词的”网址。
答案 0 :(得分:2)
你在这里有错误的逻辑,它应该是一个干净的URL重写到一些花哨的内部,而不是相反。你也应该在两者之间建立一个干净的关系。
无论如何,nginx在大多数指令中都没有匹配参数,包括位置和重写。更简洁的方法是通过map
指令。
map $request_uri $target_uri {
"~/blog/blogdetail\?id=20$" "/train/my-page";
}
server {
...
location /blog {
rewrite ^/blog/blogdetail$ $scheme://$host$target_uri? permanent;
}
}