2009-07-17 142 views
1

我真的很努力與這個正則表達式。正則表達式匹配一個htaccess文件的URL模式

我們啓動了新版本的「羣組」功能,但需要在同一個網址支持所有舊羣組。幸運的是,這兩個功能有不同的網址模式,所以這應該很容易?對?

  • 老:domain.com/group/$groupname
  • 新:domain.com/group/$groupid/$groupname

我使用正則表達式的正則表達式當前重定向老老組的腳本是:RewriteRule ^(group /([^ 0-9 /].*))$ /old_group.php/$1 [L,QSA]

它一直很好,直到一個組彈出up叫這樣的:domain.com/group/2009-neato-group

在這一點上,正則表達式匹配並強制新組到舊代碼,因爲它包含數字。糟糕!

那麼,任何想要匹配舊模式的正則表達式,所以我可以重定向它?

模式必須匹配

  • 組/我的老組
  • 組/另一歲組/
  • 組/ 123-另一歲組-456 /一個模塊-內最組/

模式不能匹配

  • 組/ 12/A-新組
  • 組/ 345 /另一個新組/
  • 組/ 6789/A-第三組/模塊-ABC/

的我想過的最好方式是它不能以「group-slash-numbers-slash」開頭,但無法將其轉化爲正則表達式。所以,否定這種模式的東西可能會起作用。

感謝

回答

0

想想周圍的其他方法:如果url匹配^組/ [0-9] +/+,那麼它是一個新的羣體,所以重定向這些第一(與[L。 ] 規則)。其他一切都必須是一個老組,你可以在那裏保留你的舊規則。

+0

這是我正在思考的一種方法,但相反的方式看起來比我在代碼中的其他規則更清晰。但是,我最終可能會陷入困境。謝謝。 – 2009-07-18 00:50:27

0

你的設計選擇使純htaccess的解決困難,尤其是因爲group/123-another-old-group-456/a-module-inside-the-group/是一個有效的舊風格的URL。

我會建議一個重定向腳本,查看它的參數,確定第一部分是否是有效的groupid,如果是這樣,這是一種新式URL將用戶帶到該組。否則,這是一箇舊式的網址,請將其交給old_group.php。事情是這樣的:

RewriteRule ^group/(.*)$ /redirector.php/$1 [L,QSA]