RewriteConditions停止处理捕获所有htaccess重写

时间:2015-04-01 10:11:31

标签: .htaccess mod-rewrite

我试图弄清楚正确的规则和条件,以便在成功匹配其他规则后捕获所有重写规则不匹配:

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]

不幸的是,规则继续处理,最后一次捕获全部用于匹配。

如何构建规则和条件,以便停止在/dev/Param1/Param2处理?

2 个答案:

答案 0 :(得分:1)

变化:

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

...为:

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

[OR]允许忽略一个或另一个条件。目录不是文件,因此它会通过。并且文件不是目录,所以它也通过了。

在此您要传递REQUEST_FILENAME不是文件而且不是目录的条件。

答案 1 :(得分: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]