我有一個 WordPress 博客,我需要將其遷移到另一個網站,我們將在其中使用 API 從 WordPress 后端獲取資料。由于 WordPress 網站每個月都會收到大量訪問,因此我需要創建從 WordPress 到新網站的重定向。
舊的 URL 結構
https://myblog.com/category/alias-of-the-article
新的網址結構
https://mynewwebsite.com/blog/alias-of-the-article
我在想有這樣的事情:
RedirectMatch 301 "/(.*)/(.*)" "https://mynewwebsite.com/blog/$2"
但是我仍然需要 API、影像以及“wp-content”檔案夾下的所有內容保留在 myblog.com 網站上,因為我將從 API 加載這些資源。
為每個類別創建重定向是實作這一目標的唯一方法嗎?
"/category1/(.*)" "https://mynewwebsite.com/blog/$1"
"/category2/(.*)" "https://mynewwebsite.com/blog/$1"
...
"/category20/(.*)" "https://mynewwebsite.com/blog/$1"
uj5u.com熱心網友回復:
如果舊域和新域指向同一個位置,那么您可能需要使用 mod_rewrite ( RewriteRule/ RewriteCond) 而不是 mod_alias ( RedirectMatch) 來檢查Host標頭,以避免在新域中重定向 URL。
還建議不要混合來自兩個模塊的重定向以避免意外沖突(盡管組態檔中的指令順序明顯,但 mod_rewrite 首先運行)。
使用 mod_rewrite,您可以使用條件(RewriteCond指令)來創建例外,而不必在正則運算式中使用負前瞻(如果您需要進行許多例外,這可能會更復雜)。
在根.htaccess檔案的頂部,在任何現有的 WordPress 指令之前(即在該# BEGIN WordPress部分之前)嘗試以下操作。
例如:
RewriteCond %{HTTP_HOST} ^(www\.)?oldwebsite\.example [NC]
RewriteCond %{REQUEST_URI} !^/wp-content/
RewriteCond %{REQUEST_URI} !^/wp-json/
RewriteCond %{REQUEST_URI} !^/feed/
RewriteRule ^[^/.] /([^/.] )$ https://newwebsite.example/blog/$1 [R=302,L]
在!上前綴CondPattern(例如!^/wp-content/)否定了正則運算式,所以它是成功的,當它不匹配。
如果您稍后需要使用反向參考,您只需要在正則運算式中使用括號子模式。因此,在上面的正則運算式中,似乎不需要捕獲catgeory。
注意:首先使用 302(臨時)重定向進行測驗以避免潛在的快取問題。只有在確認它按預期作業后才更改為 301(永久)重定向。
RedirectMatch 301 "/(.*)/(.*)" "https://mynewwebsite.com/blog/$2"
這個正則運算式的一個問題是它匹配太多了。的*量詞是貪婪的默認,所以給出的形式的URL /foo/bar/baz,它會重定向到/blog/baz。請參閱有關貪婪正則運算式的陷阱的最近問題:正則運算式的意外行為
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/316582.html
標籤:php 正则表达式 WordPress的 .htaccess 重定向
上一篇:如何重定向幾乎相似的鏈接?
