2017-05-04 88 views
1

嗨,大家好,我有一個重定向的問題。我嘗試做一個301

www.example.com/? to www.example.com/ 

301重定向「/?」和「/?我= xxx」到「/」

www.example.com/?i=xxxx to www.example.com/ 

有了這個代碼:

RewriteEngine On 
RewriteBase/
RewriteCond %{QUERY_STRING} ^i=(.*)$ 
RewriteRule ^$ https://www.example.com/ [R=301,L] 

或與此

RewriteEngine On 
RewriteBase/
RewriteCond %{QUERY_STRING} ^i=(.*)$ 
RewriteRule ^$/R=301,L] 

,但繼續增加的i=xxx當我重定向到新的網站.. 。

我想重定向

  • /?/
  • /?i=xx/

回答

1
RewriteRule ^$ https://www.example.com/ [R=301,L] 

你需要一個?添加到結束替代(實際上是一個空查詢字符串)。否則,如果您沒有指定查詢字符串,則Apache會自動從請求中複製查詢字符串。單個?不會出現在目標上 - 查詢字符串將被完全刪除。例如:

RewriteEngine On 
RewriteCond %{QUERY_STRING} ^i=(.*)$ 
RewriteRule ^$ https://www.example.com/? [R=301,L] 

RewriteBase指令,因爲你不使用相對換人這裏不需要。

注意:如果您使用WordPress,您應該將(.*)更改爲[0-9]+,否則它可能會破壞某些內部功能,如預覽帖子。參考:https://xeedbeam.me/prevenir-contenido-duplicado-en-wordpress-con-htaccess-para-seo-parte-1/

或者,也可以在Apache 2.4+上使用QSD(查詢字符串放棄)標誌。

RewriteRule ^$ https://www.example.com/ [QSD,R=301,L] 

您需要在測試前清除瀏覽器緩存。

UPDATE:

我想重定向到/?/

這是一個比較棘手,因爲你不能確定(只使用QUERY_STRING變量)是否查詢字符串完全沒有(即沒有0​​)或只是空的(與?但沒有後)。但是,您可以檢查包含實際請求標頭的THE_REQUEST服務器變量(例如「GET /? HTTP/1.1」)。例如:

RewriteEngine On 
RewriteCond %{THE_REQUEST} ^GET\s/\?\sHTTP 
RewriteRule ^$ /? [R=301,L] 

但是,這對於搜索引擎來說不太可能是個問題。 example.com/example.com/?應該被對待相同。