2017-08-10 110 views
0

我試圖從URL中剪切參數,但保留其他參數,我永遠不知道該值。htaccess:嘗試從url中刪除參數,保留其他可選參數

www.example.com/?useless=somevalue&foo=somevalue&bar=somevalue 
to => 
www.example.com/?foo=somevalue&bar=somevalue 

www.example.com/?useless=somevalue 
to => 
www.example.com/ 

www.example.com/?foo=somevalue&bar=somevalue&useless=somevalue 
to => 
www.example.com/?foo=somevalue&bar=somevalue 
+0

另一個問題似乎是實際值的樣子' www.example.com/?useless =%25252525252525252525252525252525252525252Fproc%25252525252525252525252525252525252525252Fself%25252525252525252525252525252525252525252Fenviron'那麼我如何匹配這些? –

回答

1

您可以使用此規則從任何位置刪除命名查詢參數:

RewriteEngine On 

RewriteCond %{THE_REQUEST} \?(.*&)?useless=[^&]*&?(\S*)\sHTTP [NC] 
RewriteRule^%{REQUEST_URI}?%1%2 [R=301,NE,L] 
+0

實際上根本不起作用。無論參數位於何處。 –

+0

它在我的Apache上爲參數的每個位置工作。很可能你有一些本地代碼/配置問題導致此規則根本不會觸發。 – anubhava

+0

可能是,它在CMS環境中,所以可能會有更多。 –

0

我現在所擁有的:

如果參數是在中間

RewriteCond %{QUERY_STRING} ^(.+)&useless=[0-9a-z_-]+&(.+)$ [NC] 
RewriteRule (.*) $1?%1&%2 [R=301,L] 

如果參數是最後一個

RewriteCond %{QUERY_STRING} ^(.+)&useless=[0-9a-z_-](.+)$ [NC] 
RewriteRule (.*) $1?%1 [R=301,L] 

如果它是第一個,但有以下一些

RewriteCond %{QUERY_STRING} ^(.+)?useless=[0-9a-z_-]+&(.+)$ [NC] 
RewriteRule (.*) $1?%1%2 [R=301,L] 

但不能FIGUR出的條件和規則,如果它是唯一的參數

+0

工作,除非_useless_的值是'%25252525somethingsomething%2525' –