我一直在尋找答案,但一直無法自己解決它。我想要做的是將一組約1500+個URL從一種格式重定向到另一種格式,其中兩者之間唯一一致的是最後一串數字。.htaccess - 301重定向的URL結構不相同
如果相關,舊的URL來自PHP中的一個站點,新的URL將用於WordPress站點,所以顯然我需要使用正則表達式和htaccess。
當前URL的格式如下:
[domain]/[one or more categories separated by a forward slash]/[post name]/[id]
由於WordPress的固定鏈接系統中的限制,新的URL結構將是:
[domain]/[one or more categories separated by a forward slash]/[post name]-[id]
在理論是我可以匹配身份證,並使中間部分完全武斷,但這似乎並不奏效。這可能是WordPress的永久鏈接並不靈活,因爲我假設,但下面是兩個規則,到目前爲止,我已經試過:
RewriteRule ^([A-Za-z0-9\-]+)/([A-Za-z0-9\-]+)/(\d*)(/)$ http://localhost/ats-new/([A-Za-z0-9\-]+)/([A-Za-z0-9\-]+)(-)$3/ [R=301,NC,L]
RewriteRule ^([A-Za-z0-9\-]+)/([A-Za-z0-9\-]+)/(\d*)(/)$ http://localhost/ats-new/([A-Za-z0-9\-]+)/$2-$3(/) [R=301,NE,NC,L]
我想在最後匹配數字,因爲這將在兩個URL之間保持一致,並且保證對每個帖子始終是唯一的。值得注意的是,即使ID是由於兩個系統之間存儲類別的方式不同,類別數量也不會相同。
我的問題是,我不能保證除了ID之外的URL的任何部分將是兩者之間的完全匹配,這是由於空間在原始代碼和WordPress的字符串轉義。 我上面鏈接的規則不工作持續下去,但,當他們做了他們會送我去,看上去像一個網址:
[domain]/([A-Za-z0-9\-]+)/([A-Za-z0-9\-]+)(-)[id]
我可能失去了一些東西很簡單,但在這裏我我一直在繞圈轉,所以我想在這裏問一下,看看有沒有人可以幫助解釋這一點。我已經環顧四周,但無法找到任何似乎與我期待的相同的東西。像我在下面鏈接的那些現有的主題並沒有真正爲我提供一個答案,我可以用它來解決這個問題。
Redirection 301 with htaccess with url variables
301 Redirect htaccess Change URL Structure
在此先感謝。
你不能在Rewriterule的替換字符串中使用正則表達式。它必須是一個實際的字符串。 –
提供舊網址和新網址的示例 – anubhava