Dot-Htaccess

.htaccess 301 重定向 URL 忽略其參數

  • June 2, 2019

文件重定向

Redirect 301 /products.php http://example.com/product_123.php

和域重定向

Redirect 301 / http://www.example.com/

很容易。但是,我想重定向一些忽略所有參數的 URL,即

example.com/slug1/slug2/slug3?pagination=1
example.com/slug1/slug2/slug3?ref=2
example.com/slug1/slug2/slug3?day=Monday
example.com/slug1/slug2/slug3?referer=Google 
example.com/slug1/slug2/slug3?referer=Facebook
... etc  

都應該重定向到

example.com/slug4

這就是您應該使用RedirectMatch帶有正則表達式匹配的指令而不是普通的Redirect.

也許是這樣的:

RedirectMatch 301 "/slug1/slug2/slug3(.*)$" "/slug4"

如果您想簡單地忽略所有參數,那麼您仍然可以使用標準Redirect,因為它是前綴匹配並且無論如何都不匹配查詢字元串。例如:

Redirect 301 /slug1/slug2/slug3 /slug4

以上Redirect將 301 重定向問題中的所有 URL(即所有以 開頭的 URL /slug1/slug2/slug3)到/slug4.

但是,所請求 URL 上的任何查詢字元串也將原封不動地傳遞到目標 URL。因此,/slug1/slug2/slug3?ref=2將被重定向到/slug4?ref=2. 如果這是不可取的,並且您希望完全刪除查詢字元串*1,那麼您將需要使用 mod_rewrite (即。RewriteRule),而不是 mod_alias (即。RedirectRedirectMatch,如另一個答案中所建議的)以顯式刪除完全來自目標 URL 的查詢字元串。例如:

RewriteEngine On
RewriteRule ^slug1/slug2/slug3$ /slug4? [R=301,L]

?替換末尾的將RewriteRule導致從目標 URL 中刪除查詢字元串(您也可以QSD在 Apache 2.4+ 上使用該標誌)。RewriteRule 查詢字元串與模式不匹配,所以這方面不需要額外做,除非需要匹配特定的查詢字元串,或者只有在實際存在查詢字元串時(無論是否查詢字元串是否存在)。

切換到 mod_rewrite 重定向的另一個警告是,理想情況下,您應該將任何現有的 mod_alias 重定向更改為等效的 mod_rewrite 語法。這是為了避免任何潛在的衝突,因為這兩個模組在不同的時間執行。

*1請注意,您可以or指令?在目標 URL 的末尾簡單地附加一個(即空查詢字元串)但是,尾隨指令那樣被完全刪除Redirect``RedirectMatch``?``RewriteRule

引用自:https://serverfault.com/questions/793087