2011-11-04 20 views
0

我再次爲您提供幫助。我現在有一個巨大的.htaccess文件,我們用它來美化我們的網址。這通常很簡單,但我現在遇到了一個我不知道如何解決的問題。如果是PCRE,我知道我可以簡單地做一個foreach來處理這個,但是在.htaccess中,我不知道如何繼續。在.htaccess上匹配多次正則表達式

我的URL可以有一組關於頁面上的分隔塊的頁面ID,這是我用來匹配它的代碼(?:/((?:glc|gli[0-9]+)?page)/([0-9]+)),我將它添加到我的[L,QSA]規則中,作爲$1=$2(表達式是比它複雜得多,我只是獲得相關部分)。

通常pageid可能會出現或不在網址上,在這些情況下,我只需在其末尾添加一個?,但在此特定網址上,我可能有多達28個。我可以在匹配模式中添加*或更具體的{0,28},但我不知道如何在返回部分引用每對。

簡單地說,我想轉換:

/page/10/glcpage/1/gli123/9 => page=10&glcpage=1&gli123page=9 
/page/5 => page=5 

任何人有什麼想法?

對於那些足夠虐待的人,這是完整的正則表達式。 pageid = $ 4是正常的代碼,用於在url上只有1種可能性時抓取頁面。這就是我想改變的。

^modsystem/([0-9]+)(?:/(?!(?:glc|gli[0-9]+)?page/[0-9]+|comment/[0-9]+|module/[0-9]+)([^/]+))?(?:/module/([0-9]+))?(?:/((?:glc|gli[0-9]+)?page)/([0-9]+))*(?:/comment/([0-9]+))? 

/modsystem.php?action=showall&modsystemid=$1&seoslug=$2&moduleid=$3&pageid=$4&commentid=$5 

[L,QSA] 

編輯:固定一些括弧得到了錯誤的複製

回答

0

你必須單獨測試每一個可能的pageid。沒有辦法循環通過匹配或處理可變數目的匹配。