基于HTTP:X-FORWARDED-FOR允许htaccess中的访问

5

您好,我应该只允许特定的IP地址(即HTTP:X-FORWARDED-FOR地址)访问文件。我已经通过以下方式实现:

Options +FollowSymLinks
RewriteEngine On
RewriteBase /

RewriteCond %{HTTP:X-FORWARDED-FOR} !^xxx.xxx.x.xx$
RewriteRule ^$ http://xxx.xxx.x.xx/access_denie.php [R=301,L]

现在我需要允许多个IP地址,例如yyy.yy.y.yy。如何使用htaccess实现这一功能。

2个回答

14

^xxx.xxx.x.xx$ 部分是您的 RewriteCond 中的一个正则表达式。您可以轻松使用组添加更多的 IP 地址:

^(xxx\.xxx\.x\.xx|yyy\.yy\.y\.yy)$

你会注意到我已经用反斜杠转义了所有的 . - 这是因为在正则表达式中,. 有特殊含义,如果您想要它只匹配一个字面上的 . 字符,就需要对其进行转义。

所以你的新的 RewriteCond 将会像这样:

RewriteCond %{HTTP:X-FORWARDED-FOR} !^(xxx\.xxx\.x\.xx|yyy\.yy\.y\.yy)$

您可以轻松地添加更多IP地址,只需用|字符分隔它们即可。

请注意,但是,这种方法并不能真正提供安全性。很容易就可以伪造请求以绕过此限制。如果您需要安全性,应该使用SSL和适当的认证系统。


0
RewriteCond %{HTTP:X-Forwarded-For}i 1\.1\.1\.1 [OR]
RewriteCond %{HTTP:X-Forwarded-For}i 2\.2\.2\.2 [OR]
RewriteCond %{HTTP:X-Forwarded-For}i 3\.3\.3\.3
RewriteRule ^(.*) - [F]

或者

RewriteCond %{HTTP:X-Forwarded-For} (1\.1\.1\.1|2\.2\.2\.2|3\.3\.3\.3)
RewriteRule ^(.*) - [F]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接