Url rewriting nginx重写重定向规则无法正常工作
我想重定向URL,如Url rewriting nginx重写重定向规则无法正常工作,url-rewriting,nginx,Url Rewriting,Nginx,我想重定向URL,如http://mysite.com/?action=add&goback=1至http://myiste.com/add/?goback=1 我想到: location / { if ($request_uri ~* /\?action.*) { add_header Cache-Control private; rewrite ^/\?action=([^&]*)&?(.*)$ /$1/?$2 permanent;
http://mysite.com/?action=add&goback=1
至http://myiste.com/add/?goback=1
我想到:
location / {
if ($request_uri ~* /\?action.*) {
add_header Cache-Control private;
rewrite ^/\?action=([^&]*)&?(.*)$ /$1/?$2 permanent;
}
}
但它不起作用,我也不明白为什么
另外,我需要add\u header
来指示是否($request\u uri~*/\?action.*){
发生了。
我尝试过其他几种解决方案,比如
rewrite ^/\?action=(\w+).*$ /$1/?$query_string permanent;
没有成功
更新:
实际目标是:
如果URL看起来像这样
http://mysite.com/add/?param1=param1&...
/(添加)/应成为操作参数:
location ~ /[\-\w]+/ {
rewrite ^/([^/]*).*$ /?action=$1 last;
...
}
这似乎是正常工作,我想我不需要额外的帮助这一个
如果URL如下所示:
http://mysite.com/?action=add¶m1=param1&...
nginx应重定向到:
http://mysite.com/add/?param1=param1&...
当我尝试做这部分时,我得到了我不需要的结果-无限重定向循环,URL如http://mysite.com/add/?action=add¶m1=param1&...
等
有解决方案可以满足我的目标吗?这是因为
重写
只匹配URI路径,没有查询参数,很像位置
。请尝试类似的方法:
location = / {
if ($arg_action) {
rewrite ^ /$arg_action/ permanent;
}
}
location=/
检查将确保该规则仅应用于对/
的请求,if($arg\u action)
检查是否存在action=…
参数,rewrite^/$arg\u action/permanent;
将实际重定向到重写的URI。查询字符串将被保留(默认情况下)从最初的要求
有关文档,请参阅。我想我最好澄清我实际需要什么(问题将更新)。您的回答很有帮助,但是我得到了一个重定向到
/add/?action=add
,这不是我所需要的。摆脱action=add
非常简单,只需在重写替换字符串中添加一个查询字符串,而不添加action=add
,然后添加另一个?
,以避免默认的查询字符串追加。类似于rewrite^/$arg\u action/?$newquery?permanent;
就可以了。如何构造$newquery
变量留给读者作为练习(提示:map$args$newquery{~^action=add\&(?)$foo;}
将是一个很好的起点,但它并没有涵盖所有可能的情况,因为通常无法保证操作=
参数将是第一个).好的,谢谢你的回复,现在请给我一些时间来讨论一下。如果你更新了你的答案而不是发表评论,那也会很好-这是为了社区-那些希望在一个地方看到完整解决方案而不必费心阅读评论的人。