2010-10-26 35 views
1

所有,一個可以使用反向引用命名的Apache中的mod_rewrite

我在我的RewriteRules,我想通過使用命名的反向引用來解決的一個遇到一個有趣的小怪癖。但是從我所看到的情況來看,這在Apache的mod_rewrite中是不可能的。

我有兩個傳入的url,每個包含一個關鍵變量,需要重寫爲相同的底層框架動作。

傳入的URL:

/users/list/page-2 
/users/list/2 

希望重寫端點

/模塊=用戶&行動=列表&頁次= 2

我也喜歡做這樣的事情這

重寫規則^ /(P <模塊>([\ W] +)?)/(P <動作>([\ W] +)?)/(頁 - )?(P <頁次>([\ d] +))$ /?模塊= $ {}模塊動作& = $ {}行動&頁次= $ {}頁次[L,QSA]

然而阿帕奇只是不想玩這樣的在所有指定的反向引用的位置給了我空值。爲了解決這個問題,我使用了對捕獲組的數字引用($ 1,$ 2,$ 4)(但我幾乎達到了N = 9 apache限制的一半)。所以這對我來說不是一個阻礙。

我只想知道,如果在Apache的mod_rewrite中有名稱的反向引用,如果它們是,爲什麼我的RewriteRule的模式不匹配?

感謝, 伊恩

回答

1
+0

這當然是達到所需結果的一種方式,但正如我在問題中所述,我已經使用數字參考已經有一個內聯解決方案。我的問題直接指向使用PCRE的內聯命名反向,可以使用它們,如果可以,爲什麼我的RewriteRule不起作用。 – flungabunga 2010-10-27 00:45:04

+0

我認爲不支持名爲重寫。「RewriteCond指令」下只有四種方法:1.RewriteRule反向引用2.RewriteCond反向引用3.RewriteMap擴展(我的建議)4.服務器變量。其中只有兩個是非數字的。而非數字方法,它不會做你正在做的事情。 – denormalizer 2010-10-27 00:52:35

+0

是的,我在doco上看到相同的結果,因爲背景N是集合(1 <= N <= 9),沒有提到命名反向引用。 (這讓我感到厭煩)。上調。 – flungabunga 2010-10-27 01:01:52

0

如果@超空間的最新答案是不行的,我的建議是路由不在直接文件的所有鏈接/目錄並將它們路由到索引頁面。然後設置一個路由類,它接受頁面名稱並進行手動匹配,這樣您就可以擁有命名的捕獲正則表達式數組,並列出要提供的模板或頁面。

如果你必須這樣做,讓我知道,我可以從我的課上提供一些代碼。

+0

過去在各種框架中使用過這樣的類。當mod_rewrite不可用時,或者使用管理的web服務器和支持團隊是slooooooow時尤其方便。但是,我擁有一個簡單的內聯解決方案,但'知道是否有名稱的反向引用可用,以及如何如此。 – flungabunga 2010-10-27 00:51:24

0

查看mod_rewrite源代碼後,看起來沒有反向引用。

我推薦使用RewriteMap選項,而不是一長串RewriteRules,因爲它比遍歷冗長的列表要快得多。

相關問題