2014-02-18 56 views
2

由於不值得進入此處的原因,Google一直使用URL中的一個不必要的查詢字符串爲我的一個網站建立索引。我想將我的htaccess文件修改爲301將所有這些請求重定向到URL,而不需要查詢字符串的不必要部分,但保留查詢字符串中可能(或不可以)成爲地址的一部分的任何其他部分確保保留其他功能。使用htaccess刪除單個查詢參數

例如,以下網址

http://example.com/product.php?query=12345 
http://example.com/index.php?section=ABC123&query=56789 
http://example.com/search.php?query=987654&term=keyword 

將成爲

http://example.com/product.php 
http://example.com/index.php?section=ABC123 
http://example.com/search.php?term=keyword 

有效剝離 '查詢= XXXXX' 加?或&,但要確保其他查詢在刪除後保留並且語法正確(即,從第三個示例中刪除?query = 98765將不起作用,因爲它會將鏈接保留爲search.php & term = keyword,而不是比search.php?term = keyword)。

一直在尋找通過一些其他的協議棧的答案,發現這個:

RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{QUERY_STRING} (.*)?&?query=[^&]+&?(.*)? [NC] 
RewriteCond %{REQUEST_URI} /(.*) 
RewriteRule .* %3?%1%2? [R=301,L] 

但是,這似乎並沒有工作,我的htaccess &正則表達式的知識是不夠好,找出原因。

預先感謝任何指針。

回答

4

試試這個(我用你的例子測試,它工作正常):

RewriteEngine on 

RewriteCond %{QUERY_STRING} ^(.*)&?query=[^&]+&?(.*)$ [NC] 
RewriteRule ^/?(.*)$ /$1?%1%2 [R=301,L] 

此外,你應該添加一個條件僅在現有文件(這是由你)應用此規則。
如果你想要它:

RewriteEngine on 

RewriteCond %{REQUEST_FILENAME} -f 
RewriteCond %{QUERY_STRING} ^(.*)&?query=[^&]+&?(.*)$ [NC] 
RewriteRule ^/?(.*)$ /$1?%1%2 [R=301,L]