2013-02-05 134 views
0

我正在處理一個有趣的情況。這裏是發生了什麼:正則表達式重定向/ 301

當前的URL例1:

www.domain.com/red-widgets-cid-1234.html 

www.domain.com/red-widgets-cid-1234-1.html 

www.domain.com/red-widgets-cid-1234-1-1.html 

規範對上述所有網址:

www.domain.com/red-widgets-cid-1234.html 

New URL: 
www.domain.com/red-widgets-cid-4567.html 

當前的URL例2:

www.domain.com/red-widgets-cid-1234+10.html 

www.domain.com/red-widgets-cid-1234+10-1.html 

www.domain.com/red-widgets-cid-1234+10-1-1.html 

規範上的所有以上網址:

www.domain.com/red-widgets-cid-1234+10.html 

New URL: 
www.domain.com/red-widgets-cid-6789.html 

我想確保上述URL的所有變體都重定向到新的url。我可以使用什麼通配符301重定向/正則表達式來解決這些問題?

回答

0

試試這個(沒有測試過):

# (perhaps you need to escape "+" as "\+", 
    # - can you really have a "+" in the URL?) 

    RewriteCond %{REQUEST_URI} ^/red-widgets-cid-1234+10+5(.*).html [NC] 
    RewriteRule (.*) %{HTTP_HOST}/american-red-widgets-cid-6789+5%1.html [QSA,L] 

    RewriteCond %{REQUEST_URI} ^/red-widgets-cid-1234+10(.*).html [NC] 
    RewriteRule (.*) %{HTTP_HOST}/red-widgets-cid-6789%1.html [QSA,L] 

    RewriteCond %{REQUEST_URI} ^/red-widgets-cid-1234(.*).html [NC] 
    RewriteRule (.*) %{HTTP_HOST}/red-widgets-cid-4567%1.html [QSA,L] 

最主要的是測試時間最長的「共同」的網址第一。
%1表示從最近的RewriteCond開始的第一個正則表達式。
$1表示從當前RewriteRule開始的第一個正則表達式表達式。

注意!如果新的URL應該與RewriteCond捕獲的所有URL相同,則應該跳過%1,這隻在需要時才需要。 american-red-widgets-cid-6789+5-1.html for red-widgets-cid-1234+10+5-1.html

+0

在RewriteRule語句中,我們使用%1還是$ 1? 此外,如果我們還處理: **當前網址示例3:** www.domain.com/red-widgets-cid-1234+10+5.html www.domain.com/red- widgets-cid-1234 + 10 + 5-1.html www.domain.com/red-widgets-cid-1234+10+5-1-1.html ** Canonical所有以上網址:** www.domain.com/red-widgets-cid-1234+10+5.html **新網址:** www.domain.com/american-red-widgets-cid-6789+5.html Can我們還在RewriteCond規則的URL的「red-widgets」區域中使用通配符?該應用程序僅查看cid後面的內容。 – Nakul

+0

我更新了我的答案,但您應該在原始問題中添加新問題,否則會有點混淆。 – 244an