我试图弄清楚正确的规则和条件,以便在成功匹配其他规则后捕获所有重写规则不匹配:
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¶m2=$2 [QSA,L]
RewriteCond %{REQUEST_URI} !^index_dev.php$
RewriteRule ^(.*)$ ApplicationPublic/APP/index.php [QSA,L]
不幸的是,规则继续处理,最后一次捕获全部用于匹配。
如何构建规则和条件,以便停止在/dev/Param1/Param2
处理?
答案 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¶m2=$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]