mod_rewrite基于ip

Jos*_*osh 13 apache .htaccess mod-rewrite

我想实现mod_rewrite以使我的网站进行维护.基本上除了我们指定的少数IP地址之外的所有IP地址都将被转发到静态html页面.

请有人帮忙解决这条规则.还有一种方法可以在不编辑htaccess文件的情况下轻松打开和关闭它吗?

Vin*_*vic 18

您可以在RewriteCond中使用REMOTE_ADDR变量

RewriteCond %{REMOTE_ADDR} !^10\.0\.1\.1$
RewriteRule ^ /maintenance.html
Run Code Online (Sandbox Code Playgroud)

只需更改条件以匹配您想要的IP,对于多个您可以使用^(ip1 | ip2 | ... | ipn)$.

关于如何在不更改.htaccess文件的情况下禁用维护模式我认为编写一个删除它或以其他方式修改它的程序是不可能的,一个简单的方法就是重命名它.


Ale*_*lov 7

我想稍微纠正 Vinko Vrsalovic 的回答。

RewriteCond %{REMOTE_ADDR} !^10\.0\.1\.1$
RewriteRule ^ /maintenance.html
Run Code Online (Sandbox Code Playgroud)

这个规则的结果将是无限循环和 HTTP 服务器错误,因为它也会在重定向页面上执行。为了使其工作,您应该从规则中排除重定向页面。可以这样做:

RewriteCond %{REMOTE_ADDR} !^10\.0\.1\.1$
RewriteCond %{REQUEST_URI} !/maintenance.html$ [NC]
RewriteRule .* /maintenance.html [R=302,L]
Run Code Online (Sandbox Code Playgroud)


8ct*_*pus 5

对 Alexander 的答案的小改进是,没有必要对 IP 地址使用正则表达式。

RewriteCond %{REMOTE_ADDR} !=10.0.0.1
RewriteCond %{REQUEST_URI} !/maintenance.html$ [NC]
RewriteRule .* /maintenance.html [R=302,L]
Run Code Online (Sandbox Code Playgroud)

  • 这并没有做你认为它正在做的事情。`.` 是正则表达式中的通配符,因此您的第一个 `RewriteCond` 行将起作用,但根据所使用的 IP 地址,它也可能无意中允许其他 IP 溜过。(换句话说,[“RewriteCond”的第二个参数*始终*是正则表达式模式](https://httpd.apache.org/docs/2.4/mod/mod_rewrite.html#rewritecond)) (2认同)