我開發了一個專案,其中 url 結構已從舊網頁更改,我需要創建 301 重定向以避免 SEO 懲罰。在閱讀了很多之后,我找不到如何進行重寫。
舊網址
/es/madrid/comprar/893134/prop-712/
新網址
/es/property/prop-712/
理念方法
RewriteRule ^/$1/property/$5 /$1/$2/$3/$4/$5/
我需要的是僅使用第一個路徑作為引數 ( /es/) 和最后一個 ( /prop-712/) 來重構 URL/$first/property/$second并洗掉$2, $3& $4。
正如您將看到的,我們共享prop-712URL 的最后一個引數 ( )。知道這是否可能嗎?
uj5u.com熱心網友回復:
.htaccess使用 mod_rewrite在根檔案頂部嘗試以下操作:
RewriteRule ^([a-z]{2})(?:/[\w-] ){3}/([\w-] ?)/?$ https://example.com/$1/property/$2/ [R=301,L]
這會將表單的 URL /<lang>/<one>/<two>/<three>/<prop>/(尾隨斜杠可選)重定向到https://example.com/<lang>/property/<prop>/. <lang>任何兩個小寫字母語言代碼在哪里,并且example.com是您的規范主機名。這正好匹配中間被移除的 3 個路徑段。
正則運算式[\w-] 匹配每個路徑段,包括屬性(最后一個路徑段)。這匹配范圍內的a-z字符A-Z,,,,0-9(_下劃線)和-(連字符)。
只有第一個和最后一個路徑段被捕獲,然后分別使用$1和$2反向參考進行參考。與 3 個內部路徑段匹配的中間帶括號的子模式(即(?:/[\w-] ){3})是非捕獲的(由(?:前綴指示)。
您不需要重復該RewriteEngine指令,因為這已經在 WordPress 代碼塊內的檔案中稍后發生。
首先使用 302(臨時)重定向進行測驗,以防止潛在的快取問題。僅當您確定它按預期作業時才更改為 301(永久)重定向。
快速瀏覽一下您的“想法”:
RewriteRule ^/$1/property/$5 /$1/$2/$3/$4/$5/
在檔案中,模式.htaccess匹配的 URL 路徑不以斜杠開頭。RewriteRule
表單的反向$n參考用于參考RewriteRule 模式中的捕獲組(第一個引數)。反向參考只能在替換字串(第二個引數)*1中使用。您不能在RewriteRule 模式本身中使用反向參考(這是一個標準的正則運算式) -$這里作為字串結尾錨(正則運算式語法)具有特殊含義。
(*1 ...以及任何前面指令的TestStringRewriteCond (第一個)引數,但這不適用于此處。)
參考:
- https://httpd.apache.org/docs/2.4/rewrite/intro.html
- https://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewriterule
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/449238.html
標籤:WordPress 阿帕奇 .htaccess 改写 url 重写模块
