我想重定向像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 ='參數會首先被使用)。 –