apache RewriteCond不允许我的IP地址通过

mu0hgdu0  于 2023-02-16  发布在  Apache
关注(0)|答案(1)|浏览(106)

我想限制访问我的开发站点,只有我的IP地址。(例如123.123.123.123
我在我的.htaccess文件中有以下内容。但是我仍然被重定向到/dev_site_notice.html
我指定的是否正确?

SetEnvIf X-Forwarded-Proto https HTTPS=on
RewriteCond %{REMOTE_ADDR} !^123\.123\.123\.123
RewriteCond %{REQUEST_URI} !/dev_site_notice.html$ [NC]
RewriteCond %{REQUEST_URI} !\.(jpe?g?|png|gif) [NC]
RewriteRule .* /dev_site_notice.html [R=302,L]
carvr3hs

carvr3hs1#

SetEnvIf X-Forwarded-Proto https HTTPS=on
RewriteCond %{REMOTE_ADDR} !^123\.123\.123\.123

如果您正在检查SetEnvIf指令中的X-Forwarded-Proto标头,则表示您位于代理服务器之后(否则应删除此指令)。如果是这种情况,则REMOTE_ADDR服务器变量是代理的IP地址,而不是客户端IP地址。
如果(且仅当)您使用代理服务器,则应该检查X-Forwarded-For HTTP请求头。例如:

RewriteCond %{HTTP:X-Forwarded-For} !^123\.123\.123\.123($|\D)

请注意,X-Forwarded-For标头可以包含多个(逗号分隔)IP地址,具体取决于请求是否经过多个代理。client-IP通常位于第一个(最左边),但您可能需要与代理确认这一点。因此,正则表达式不应以$结尾(不管怎么说,你原来的正则表达式并没有这样做),而是($|\D)(字符串结尾或 * 不是 * 数字)。
X-Forwarded-For头是事实上的标准,但是它可以随代理而变化。当请求通过时,设置这个头的是代理服务器。

相关问题