2015-06-19 91 views
0

我一直在尋找答案,但一直無法自己解決它。我想要做的是將一組約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]

我可能失去了一些東西很簡單,但在這裏我我一直在繞圈轉,所以我想在這裏問一下,看看有沒有人可以幫助解釋這一點。我已經環顧四周,但無法找到任何似乎與我期待的相同的東西。像我在下面鏈接的那些現有的主題並沒有真正爲我提供一個答案,我可以用它來解決這個問題。

https://stackoverflow.com/questions/26368915/how-to-write-variable-url-301-redirects-in-wordpress-htaccess-file

Redirection 301 with htaccess with url variables

301 Redirect htaccess Change URL Structure

在此先感謝。

+2

你不能在Rewriterule的替換字符串中使用正則表達式。它必須是一個實際的字符串。 –

+0

提供舊網址和新網址的示例 – anubhava

回答

1

你試圖捕獲子字符串並將它們注入到替換字符串中的方式是完全錯誤的。試試這個:

RewriteRule ^([A-Za-z0-9\-]+)/([A-Za-z0-9\-]+)/(\d*)/?$ http://localhost/ats-new/$1/$2-$3 [R=301,NC,L] 
+0

這正是我一直在尋找的內容。我的一個愚蠢的疏忽讓我轉圈了。 非常感謝。 – ShadowSlasherZ