htaccess 重写到维护页面(如果存在且不存在 IP),否则引导



我将如何重写所有请求maintenance.php,如果存在,除了图像,除了IP白名单。

如果maintenance.php不存在,如果请求的文件不存在,它应该重写为引导程序(index.php(。

如果maintenance.php确实存在并且IP在白名单中,那么如果请求的文件不存在,它应该重写为引导程序(index.php(。

我尝试了以下许多变体:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{DOCUMENT_ROOT}/maintenance.php -f
    RewriteCond %{REQUEST_FILENAME} !.(jpg|png|gif)$
    RewriteCond %{REMOTE_ADDR} !^123.123.123.123$
    RewriteCond %{REMOTE_ADDR} !^111.111.111.111$
    RewriteRule . maintenance.php [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . index.php
</IfModule>

我会反过来做。 如果维护页面不存在或 IP 有效,请重写到引导程序。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/maintenance.php !-f [OR]
RewriteCond %{REMOTE_ADDR} ^123.123.123.123$ [OR]
RewriteCond %{REMOTE_ADDR} ^111.111.111.111$
RewriteRule . index.php [L]
RewriteCond %{DOCUMENT_ROOT}/maintenance.php -f
RewriteCond %{REQUEST_FILENAME} !.(jpg|png|gif)$
RewriteCond %{REMOTE_ADDR} !^123.123.123.123$ [OR]
RewriteCond %{REMOTE_ADDR} !^111.111.111.111$
RewriteRule . maintenance.php [L]

所以,基本上它将运行索引.php如果:

(Not a file) 
&& (Not a dir) 
&& (
    (Maintenance Doesn't Exist) 
    || (Remote Addr == 123.123.123.123)
    || (Remote Addr == 111.111.111)
)

我们可以使用命题逻辑来扩展它,但为什么要打扰......

这就是

我最终使用的

我希望它能帮助任何未来的访客:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{DOCUMENT_ROOT}/maintenance.php !-f [OR]
    RewriteCond %{HTTP:X-Forwarded-For} ^(x.x.x.x|y.y.y.y|z.z.z.z)$ [OR]
    RewriteRule . index.php [L]
    RewriteCond %{DOCUMENT_ROOT}/maintenance.php -f
    RewriteCond %{REQUEST_FILENAME} !.(jpg|png|gif)$
    RewriteCond %{HTTP:X-Forwarded-For} !^(x.x.x.x|y.y.y.y|z.z.z.z)$
    RewriteRule . maintenance.php [L]
</IfModule>

@ircmaxell也得到了勾号,因为他帮助我找到了这个解决方案。

尝试将您的 IP 地址括在同一RewriteCond的括号内:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{DOCUMENT_ROOT}/maintenance.php -f
    RewriteCond %{REQUEST_FILENAME} !.(jpg|png|gif)$
    RewriteCond %{REMOTE_ADDR} !^(123.123.123.123|111.111.111.111)$
    RewriteRule . maintenance.php [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . index.php
</IfModule>

最新更新