重写规则有效但在.htaccess中匹配时不会停止

时间:2015-05-29 21:38:14

标签: php regex apache .htaccess mod-rewrite

我在[.htaccess]文件中添加了以下规则:

RewriteRule ^welcome/?$ index.php [NC,L] 
RewriteRule ^bye/?$ bye.php [NC,L]  
RewriteRule ^.*/?$ error.html [NC,L]

当我输入http://localhost/welcome时,它会进入错误页面而不是索引页面。

但是当我删除.htaccess文件中的最后一条规则时,它会显示索引页面。当与第一条规则匹配时,它不应该停止。

我想通过输入网址栏来阻止用户直接访问索引页。

出了什么问题?

1 个答案:

答案 0 :(得分:0)

您需要在单独的规则中检查REDIRECT_STATUS,以验证规则是否已运行一次。

RewriteEngine On

# check if rules have run once
RewriteCond %{ENV:REDIRECT_STATUS} !^$
RewriteRule ^ - [L]

# block direct access to index.php
RewriteCond %{THE_REQUEST} /index\.php [NC]
RewriteRule ^ - [F]

# your default rules
RewriteRule ^welcome/?$ index.php [NC,L] 
RewriteRule ^bye/?$ bye.php [NC,L]  
RewriteRule .* error.html [L]