我有以下htaccess脚本:
RewriteEngine on
RewriteBase /
RewriteRule !\.(js|ico|txt|gif|jpg|png|css)$ index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(test|test1).* - [L]
我原以为: http://localhost/something.php将重定向到index.php
真。
我当时正在等待 http://localhost/test.php不会重定向到index.php
假。 (我也被重定向了。)
我错过了什么?
非常感谢
答案 0 :(得分:2)
重写规则始终按照指定的顺序进行评估。因此,您的两个URL都与第3行中的RewriteRule相匹配。其他规则将不会被评估。要使您的测试文件不被重写,您可以将最后三个规则放在最上面(即直接在RewriteBase命令下面)。
但最后,你应该更多地使用RewriteConds,例如像这样:
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !^(test|test1)
# the following RewriteCond is probably redundant because of the prior -f check
RewriteCond %{REQUEST_FILENAME} !\.(js|ico|txt|gif|jpg|png|css)$
RewriteRule (.*) index.php