mod_rewrite基于ip

时间:2009-07-02 11:32:53

标签: apache .htaccess mod-rewrite

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

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

5 个答案:

答案 0 :(得分:18)

您可以在RewriteCond中使用REMOTE_ADDR变量

RewriteCond %{REMOTE_ADDR} !^10\.0\.1\.1$
RewriteRule ^ /maintenance.html

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

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

答案 1 :(得分:1)

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

RewriteCond %{REMOTE_ADDR} !^10\.0\.1\.1$
RewriteRule ^ /maintenance.html

此规则结果将是无限循环和HTTP服务器错误,因为它也会在重定向页面上执行。要使其正常工作,您应该从规则中排除重定向页面。可以通过以下方式完成:

RewriteCond %{REMOTE_ADDR} !^10\.0\.1\.1$
RewriteCond %{REQUEST_URI} !/maintenance.html$ [NC]
RewriteRule .* /maintenance.html [R=302,L]

答案 2 :(得分:0)

您可以启用此状态并通过一些能够写入.htaccess的管理界面禁用它(例如权限设置为755或777)。它总是会找到.htaccess,在开头插入这两行,并在禁用维护时删除这两行,保持文件的其余部分不变

答案 3 :(得分:0)

对Alexander的回答做了很小的改进,没有必要对IP地址使用正则表达式。

RewriteCond %{REMOTE_ADDR} !10.0.0.1
RewriteCond %{REQUEST_URI} !/maintenance.html$ [NC]
RewriteRule .* /maintenance.html [R=302,L]

答案 4 :(得分:0)

可选的仅重定向特定地址

晚些时候参加聚会,如果有人需要的话,只是一个附件。
使用这种方法,您只需将特定地址重定向到维护中,然后使用别名即可。

ServerName  10.0.1.1
ServerAlias 10.0.2.1
ServerAlias 10.0.3.1

RewriteEngine On
RewriteRule ^(.*)$ http://www.domainname.com/maintenance.html$1 [L,R=301]