1

是否可以在使用 .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 页面。

我做错了什么还是不可能这样做?

4

1 回答 1

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 错误页面。

于 2013-05-20T10:35:54.423 回答