代码之家  ›  专栏  ›  技术社区  ›  Josh

基于ip的mod_重写

  •  13
  • Josh  · 技术社区  · 15 年前

    请有人帮我做这个规则。还有没有一种方法可以在不编辑htaccess文件的情况下轻松地打开和关闭它?

    3 回复  |  直到 7 年前
        1
  •  21
  •   Vinko Vrsalovic    15 年前

    你可以使用 REMOTE_ADDR

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

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

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

        2
  •  7
  •   Alexander Mikhailov    6 年前

    我想稍微更正一下维科·弗拉萨洛维奇的回答。

    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]
    
        3
  •  4
  •   8ctopus    4 年前

    对Alexander的答案的小改进,不需要对IP地址使用正则表达式。

    RewriteCond %{REMOTE_ADDR} !=10.0.0.1
    RewriteCond %{REQUEST_URI} !/maintenance.html$ [NC]
    RewriteRule .* /maintenance.html [R=302,L]
    
        4
  •  0
  •   dusoft    15 年前

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

        5
  •  0
  •   leopold    4 年前

    晚会迟到了,如果有人需要的话,就加一个。

    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]