我想重定向像http://mysite.com/?action=add&goback=1
到http://myiste.com/add/?goback=1
的URL。nginx重写重定向规则无法正常工作
我来:
location/{
if ($request_uri ~* /\?action.*) {
add_header Cache-Control private;
rewrite ^/\?action=([^&]*)&?(.*)$ /$1/?$2 permanent;
}
}
,但它不工作,我不明白为什么。
P.S.我需要add_header
只是表示if ($request_uri ~* /\?action.*) {
发生。 我尝试了其他几种解决方案,如
rewrite ^/\?action=(\w+).*$ /$1/?$query_string permanent;
没有成功。
UPDATE:
的实际目标是:
如果URL看起来像这样
http://mysite.com/add/?param1=param1&...
/(添加)/应成为一个行动PARAM:
location ~ /[\-\w]+/ {
rewrite ^/([^/]*).*$ /?action=$1 last;
...
}
这似乎是正常工作,我想我不需要额外帮助,这一个
如果URL是这样的:
http://mysite.com/?action=add¶m1=param1&...
nginx的应该重定向到:
http://mysite.com/add/?param1=param1&...
当我尝试做这部分我得到的结果我不t需要 - 无限重定向循环,URLs如http://mysite.com/add/?action=add¶m1=param1&...
等
有解决方案来解决我的目标吗?
我想我更清楚我实际需要什么(问题会更新)。你的回答很有帮助,但我得到了一个重定向到'/ add /?action = add',这不正是我所需要的。 – Nemoden
+ 1'd,但是,对不起, - 不能接受。 – Nemoden
摆脱'action = add'就像添加一个没有'action = add'的查询字符串到重写替换字符串一样简单,并且添加另一个'?'以避免默认查询字符串追加。像'重写^/$ arg_action /?$ newquery?永久的;'会做的伎俩。如何构建'$ newquery'变量作为练习留给读者(提示:'map $ args $ newquery {〜^ action = add \&(?。+)$ foo; }'会是一个很好的起点,但它并没有涵盖所有可能的情况,因为通常不能保证'action ='参数会首先被使用)。 –