2015-04-01 43 views
1

我試圖找出正確的規則和條件,使得包羅萬象的重寫規則不匹配,遵循不同的規則成功匹配:RewriteConditions停止處理捕獲所有的htaccess rewite

RewriteCond %{REQUEST_FILENAME} !-f [OR] 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^dev/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/?$ ApplicationPublic/APP/index_dev.php?param1=$1&param2=$2 [QSA,L] 
RewriteCond %{REQUEST_URI} !^index_dev.php$ 
RewriteRule ^(.*)$ ApplicationPublic/APP/index.php [QSA,L] 

不幸,規則繼續處理,最後一個catch全部用於匹配。

如何構造規則和條件以使其停止在/dev/Param1/Param2處理?

感謝,

+0

如果是Apache的2.4 +,使用'END'標誌 – hjpotter92 2015-04-01 10:15:58

+0

@ hjpotter92我使用的Apache 2.2 – bear 2015-04-01 10:19:43

回答

0

您可以使用:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^dev/([\w-]+)/([\w-]+)/?$ ApplicationPublic/APP/index_dev.php?param1=$1&param2=$2 [QSA,L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_URI} !/index_dev\.php$ [NC] 
RewriteRule^ApplicationPublic/APP/index.php [QSA,L] 
1

變化:

RewriteCond %{REQUEST_FILENAME} !-f [OR] 
RewriteCond %{REQUEST_FILENAME} !-d 

...到:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

[OR]是允許一個或另一個條件被忽略。目錄不是文件,因此它通過。而一個文件不是一個目錄,所以它也通過。

在這裏,您想要傳遞REQUEST_FILENAME不是文件且不是目錄的情況。