我們最近對我們的一個站點進行了更改,其中需要通過 htaccess 重定向大量 URL,但我們還需要考慮可能附加在 URL 之后的任何其他資訊。
我可以按預期獲取要重定向的特定 URL,但之后不能使用其他字符。我知道有時像這個執行緒提到的檔案中的順序規則很重要,但這些重定向不應該有任何沖突的規則。
這些都是特定的 URL,所以這個關于匹配 URL 結構中特定單詞的執行緒不適用于我們的問題。
看起來 FOO/BAR/BAZ 到 FOO/NEW/BAZ的示例也不適用。
我認為我們的快取可能會影響它,但其他更改已立即實施,所以我認為這只是語法問題
我們 htaccess 中的當前格式示例 URL:
Redirect 301 /product/product-name/ https://example.com/announcements/
需要發生的事情:人們對 /product/product-name/ 的任何傳入直接鏈接,包括尾部斜杠之后的任何內容,例如 /product/product-name/ref/123/ 也應該重定向到 /announcements/ 但這不是這樣的,這些型別的鏈接都指向我們的404頁面。
嘗試的解決方案:到目前為止(今天 - 這不是我第一次嘗試這個),我嘗試了以下方法來通配我的 301,但沒有成功:
所以問題:.htaccess 中 url 末尾的通配符重定向
SO問題:htaccess中301重定向的通配符重寫規則
外部參考:https ://bootstrapcreative.com/how-to-redirect-known-pages-and-catch-all-for-everything-else-htaccess/
我愿意接受建議并感謝任何建議!
uj5u.com熱心網友回復:
Redirect 301 /product/product-name/ https://example.com/announcements/
mod_aliasRedirect指令是前綴匹配的,匹配后的所有內容都被復制到目標 URL 的末尾。因此,例如,請求/product/product-name/ref/123/將被重定向到https://example.com/announcements/ref/123/(因為ref/123/是匹配后 URL 路徑的剩余部分/product/product-name/)。它似乎是目標 URL,即。https://example.com/announcements/ref/123/,這導致了 404,因此正在發生重定向。
要重定向/product/product-name/<anything>到https://example.com/announcements/只有這樣,您需要使用該RedirectMatch指令,該指令使用正則運算式匹配,而不是簡單的前綴匹配。
例如:
RedirectMatch 301 ^/product/product-name/ https://example.com/announcements/
這將重定向如下:
/product/product-name/到https://example.com/announcements//product/product-name/ref/123/到https://example.com/announcements//product/product-name/<anything>到https://example.com/announcements/
如果您需要更具體,例如。僅匹配可選的附屬鏈接,例如。/ref/<number>/,而不是字面上的任何東西,然后執行以下操作:
RedirectMatch 301 ^/product/product-name/(ref/\d /)?$ https://example.com/announcements/
如評論中所述,您應該首先使用 302(臨時)重定向進行測驗,以避免潛在的快取問題。并且您需要在測驗之前清除瀏覽器快取,因為錯誤的 301(永久)重定向將被瀏覽器快取。
但是,如果您已經RewriteRule在組態檔的其他地方使用了 mod_rewrite ( ) 指令,那么您可能需要(或者更可取)為此重定向使用 mod_rewrite。
參考:
Redirect- https://httpd.apache.org/docs/2.4/mod/mod_alias.html#redirectRedirectMatch- https://httpd.apache.org/docs/2.4/mod/mod_alias.html#redirectmatch
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/425161.html
