2011-11-11 32 views
0

我是新的Apache重寫規則。 我試圖重寫URLApache重寫規則查詢具有正則表達式並且遞歸運行

對於前:

http://www.example.com/try/this/all+letters+with+plus - >http://www.example.com/try/this/allletterswithplus

所以要求我必須把它有重定向到URL/TRY /本,不包括+符號的休息。需要注意的一點是,加號的數量並不固定,它可以有2到7個或者更多的加號。最好用正則表達式的選項將是很好的,因爲所有+字母+與+加文本可以包括數字到字母,但沒有跡象

我嘗試了一些組合任何東西,但隨後進入遞歸循環。

任何幫助將不勝感激。

回答

1

您可以使用mod_rewrite以2個步驟完成此操作。第一步是從/try/this/之後的任何東西中刪除所有的「+」,然後第二步是檢查請求最初是否具有「+」,但當前的URI沒有。

此規則將不斷刪除「+」符號,直到沒有任何符號。但我們只是通過重寫引擎。

RewriteRule ^try/this/(.*)\+(.*)$ /try/this/$1$2 [PT] 

該規則檢查原始請求是否包含帶「+」的URL,如果存在,請檢查它們是否全部被刪除。如果是這樣,結束所有的重寫和重定向瀏覽器:

RewriteCond %{THE_REQUEST} \ /try/this/.*\+.*\ HTTP 
RewriteRule ^try/this/([^\+]*)$ /try/this/$1 [R,L] 

你提到,你想重定向到/ TRY /本/ URL不帶「+」的招牌。但是,如果您只是想在內部重寫而不重定向瀏覽器,則不需要第二部分,只是第一條規則會將其刪除。

+0

嗨喬恩, 這似乎並不奏效。它只刪除了最後兩個字母的加號。我希望這個遞歸地去除所有的加號。 http://www.example.com/try/this/all+letters+with+plus - > http://www.example.com/try/this/all+letters+withplus 你說得對,我只是希望它在內部重寫而不是將其重定向到不同的URL。 任何暗示。 謝謝。我在這個方向上找到了一些領先的建議。 – JavaBugger

+0

如果您不需要重定向,那麼只需使用頂級規則。當我在.htaccess文件中輸入'RewriteRule^try/this /(.*)\+((*)$/try/this/$ 1 $ 2 [PT]',並用「example.com/try/this/ a + b + c + d +++++ e ++++ f ++++++ g + h +++++「,我在日誌中看到」example.com/try/this/abcdefgh「的請求。 –