我在我的 htaccess 檔案中設定了 RewriteRules 以將我的 php URL 重寫為 SEO 友好的 .htm 。現在我必須設定 301 Redirect 將 php URL 指向新的 htm URL,但找不到解決方案。正如您可能猜到的那樣,我不熟悉重寫/重定向規則:(在我的 htaccess 中,附件.php 和附件-details.php 檔案都有這個,它作業得很好。
RewriteRule accessories-(.*)\.htm$ accessories.php?lang=$1
RewriteRule accessory-details-id-(.*)-(.*)\.htm$ accessory-details.php?id=$1&lang=$2
問題是我仍然可以訪問 php URL。php URL 有很好的排名,所以我需要這個 301 重定向用于 SEO 目的。如何進行重寫和 301 重定向?請注意,有些檔案有一個,而另一些檔案有兩個 GET 引數。我自己無法設定作業代碼,這讓我很生氣。這只是兩個示例,我的根目錄上有許多類似的檔案“對”,但我認為如果我能讓這兩個檔案正常作業,我可以設法使代碼適應其他檔案。
uj5u.com熱心網友回復:
'id' 引數是一個整數 - 1 2, 3, ...,'lang' 引數是一個字串 - “en”或“fr”。例如:'accessory-details.php?id=6&lang=en'(帶引數的舊 URL)和 'accessory-details-id-6-en.htm' //新的 SEO 友好 URL
您現有的正則運算式(子模式)太通用了。.*匹配任何內容(包括您用作分隔符的連字符),因此導致正則運算式相當模糊。正則運算式應盡可能具體,以確保您不會不必要地重寫(和處理)從一開始就無效的 URL。
假設您的.htaccess檔案和其他檔案位于檔案根目錄中,請嘗試以下操作:
Options -MultiViews
RewriteEngine On
# Redirect old URLs (PHP files) to new URLs
RewriteCond %{QUERY_STRING} ^lang=([a-z]{2})$
RewriteRule ^accessories\.php$ /accessories-%1.htm [QSD,R=301,L]
RewriteCond %{QUERY_STRING} ^id=(\d )&lang=([a-z]{2})$
RewriteRule ^accessory-details\.php$ /accessory-details-%1-%2.htm [QSD,R=301,L]
# Internal rewrites (new URL to file)
RewriteRule ^accessories-([a-z]{2})\.htm$ accessories.php?lang=$1 [END]
RewriteRule ^accessory-details-id-(\d )-([a-z]{2})\.htm$ accessory-details.php?id=$1&lang=$2 [END]
該END標志 (Apache 2.4) 確保在 URL 被重寫后不會發生進一步的處理 - 因此重寫的 URL 不會被重定向(在處理的第二階段,如L( last) 標志所發生的那樣)。
這些指令還假定您的 URL 不包含其他 URL 引數,除了id和lang宣告的那樣。并且始終按照所述順序排列。IE。id=123&lang=aa,不是lang=aa&id=123。
%1和%2反向參考包含從前面的CondPattern捕獲的值。
外部重定向上的QSD(查詢字串丟棄)標志對于丟棄重定向回應中的原始查詢字串是必要的。
注意:首先使用 302(臨時)重定向進行測驗,以避免潛在的快取問題。在測驗之前,您可能需要清除瀏覽器快取。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/495768.html
