2011-10-27 54 views
1

我有一個包含以下正則表達式 - 減號/連字符問題

/4-new-south-wales/499-some-category.html 

我想使用mod_rewrite數字和連字符之後刪除URL。

我有以下規則

RewriteRule (.*)\d+-(.*) $1$2 [R=301,L] 

這給了我下面的

/4-new-south-wales-nsw/49cross-breeds-designer-dogs.html 

這些可以被嵌套在任何級別。例如

/a/b/c/4-new-south-wales-nsw/49123123-cross-breeds-designer-dogs.html 

我想與

/a/b/c/new-south-wales-nsw/cross-breeds-designer-dogs.html 

感謝您的幫助,以結束。

+0

問題在哪裏?請告訴我們你需要做什麼rewite規則。 –

+0

嗨,我想重寫規則「刪除使用mod_rewrite的數字和下面的連字符」 – Phil

+0

究竟應該是什麼結果? '/ new-south-wales-nsw/cross-breeds-designer-dogs.html'?那麼一個更換還是兩個?可能會有更多? – morja

回答

0

嘗試以下方法:

RewriteRule (.*?)\d+-(.*?)\d+-(.*) $1$2$3 [R=301,L] 

?使得圖案ungreedy。

查看和rubular

+0

感謝morja - 一些網址只有一個數字組合,而另一些則有兩個。我用RewriteRule(。*?)\ d + - (。*)$ 1 $ 2 [R = 301,L]正在工作。所以我需要第一組的理由 – Phil

1
(/.*/)\d+-(.*) 

這會修復嗎?

。*是貪婪的,所以它也會匹配第一個數字字符,只留下最後一個數字與\ d +匹配,所以您的第一個捕獲組結束爲: /4-new-south -wales/49

+0

嗨Pcaclcao,我測試了你的正則表達式,它刪除了嵌套層次,所以結果在我的文章編輯中刪除了/ a/b/c。 – Phil

+0

我沒有設置Apache來測試這個,但使用常規的文本編輯器,並將替換與我的正則表達式應用於:/ a/b/c/4-new-south-wales-nsw/49123123-cross-breeds- designer-dogs.html給我:/a/b/c/4-new-south-wales-nsw/cross-breeds-designer-dogs.html這不是你需要的嗎? – pcalcao

+0

對不起,如果我不清楚。我想刪除數字和尾部連字符。例如。從提供的網址中刪除4-和499-。我在一個正則表達式編輯器中測試了我的解決方案,但是當我將相同的正則表達式應用於.htaccess時,我得到了連字符和一個數字數字消失的問題。 – Phil

0

測試來替代多個,任意放置的URL路徑內的/ddd-XXX模式的出現,Apache需要在需要更換每次出現一個,然後將每個置換後遞歸重定向URL。但要正確執行此操作,您需要將RewriteBase語句添加到.htaccess文件,並將其設置爲包含.htaccess文件的路徑。

下面是一個測試.htaccess文件,做了你在找什麼:

<IfModule mod_rewrite.c> 
    RewriteEngine on 

    # Set RewriteBase to the URL-path containing this .htaccess file: 
    RewriteBase /apache 

    # Redirect first "/ddd-XXX" path segment to: "/XXX": 
    RewriteRule ^((?:(?!\d+-)[^/]+/)*)\d+-(.*)$ $1$2 [R=301,L] 

    # Rewrite the resulting URL path to show.php as a query string 
    # (if resulting URL-path is NOT a real file or a directory). 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^(.+)$ show.php?path=$1 

</IfModule> 

在我的測試系統,該.htaccess文件位於/apache目錄(這是我設置了RewriteBase來) 。請注意,最終重定向的URL路徑可能不是真正的文件!在上面的.htaccess文件中,我有一個額外的規則處理最終重定向的URL(它不指向真實文件),並將此路徑作爲查詢變量傳遞給show.php腳本。