2011-03-31 35 views
1

我有一個RewriteRule標誌的問題。我有一個「主」RewriteRule處理我的應用程序,但我也有一些需要以不同方式處理的URL(請參閱自定義路由)。RewriteRule規則順序和標誌

我試過很多不同的標誌,但它從來沒有給我想要的結果。檢查我想要的代碼中的第一條評論。

# First check if this pattern is found, and if it's not, continue to the next one and disregard this one 
RewriteRule ^test/report/([0-9]+)/?$ index.php?page=report&id=$1 [PT,L] 

RewriteRule ^(.*)/?$ index.php?page=$1 [PT,L] 

在此先感謝!

回答

0

您在第一條規則上使用C標誌進行鏈接,這意味着如果第一條規則不匹配,則會忽略第二條規則。你的評論描述了沒有C標誌會發生什麼。如果你想避免在第一條規則匹配時應用第二條規則,我想你可能需要一個L標誌。

編輯:

既然你已經修改了C標誌到L上的第一條規則,還有另外一個問題。您需要確保重寫的路徑不會由您的RewriteRule指令以某種方式重新處理,從而改變它。

在這種情況下,一個實現這一目標的方法是確保頁面本身是不是已經改寫爲的index.php:

RewriteCond %{REQUEST_URI} !index.php 
RewriteRule ^test/report/([0-9]+)/?$ index.php?page=report&id=$1 [PT,L] 

RewriteCond %{REQUEST_URI} !index.php 
RewriteRule ^(.*)/?$ index.php?page=$1 [PT,L] 

不幸的是,我不知道的方法,使同一RewriteCond適用於所有規則,而不是在每個規則之前重複。

編輯:

現在我想起來了,是的,有可能是一個有些更好的解決方案。而不是使用的RewriteCond指令,開始:

RewriteRule ^index.php - [PT,NC,L] 

現在而言,一切的index.php開始將匹配,沒有什麼變化,也沒有更多的RewriteRules將緊隨其後。

+0

確實,我忘了刪除C標誌。刪除它或用L標誌替換它將導致頁面參數始終爲'index.php'。非常奇怪 – Jesse 2011-03-31 19:13:09

+0

@Jesse看我的編輯。 – Andrew 2011-03-31 19:22:04

+0

謝謝,這似乎工作,但應該有更好的解決方案,你不覺得嗎? – Jesse 2011-03-31 20:56:57