是否可以在使用.htaccess文件拒绝/允许IP阻止之前应用重定向?
我尝试过关注,但是没有重定向未列入白名单的用户被阻止,这意味着即使应该重定向也拒绝执行拒绝/允许部分。重定向部分工作正常,因为我测试它没有任何IP阻止。我预计重写中的[L]标志会在到达IP阻塞部分之前“停止”.htaccess执行。
RewriteCond %{HTTP_HOST} !^blog\.mysite\.com$ [NC]
RewriteRule (.*) http://www.mysite.com [L,NC,R=301]
Order deny,allow
Deny from all
Allow from xxx.xxx.xxx.xxx
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?/$1 [L]
为什么我这样做是因为我应该保护对http://www.mysite.com/blog的访问权限,同时仍然显示与网站为其他无效页面显示的相同的404。如果首先执行IP阻止,我无法显示由站点框架生成的相同404页面。
我做错了什么或者不能这样做?
答案 0 :(得分:2)
您可以使用重写条件来检查IP地址:
RewriteEngine On
RewriteBase /
#always redirect blog.mysite.com to www.mysite.com
RewriteCond %{HTTP_HOST} ^blog\.mysite\.com$ [NC]
RewriteRule (.*) http://www.mysite.com [L,NC,R=302]
#don't redirect if the accessDenied.php page is accessed
RewriteCond %{REQUEST_FILENAME} ^accessDenied\.php$
RewriteRule (.*) - [L]
#redirect all not whitelisted IPs
RewriteCond %{REMOTE_ADDR} !^111\.111\.111\.111 [or]
RewriteCond %{REMOTE_ADDR} !^222\.222\.222\.222
RewriteRule (.*) accessDenied.php [R=302,L]
#only whitelisted IPs will use this rewrite rule
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) index.php?/$1 [L,R=302]
如果ip匹配,则不会满足第二次重写规则,因此不会发生任何事情。但如果ip不匹配,用户将被重定向到404错误页面。