Подтвердить что ты не робот

Mod_rewrite на основе ip

Я хотел бы реализовать mod_rewrite, чтобы разместить мой сайт в обслуживании. В основном все IP-адреса, кроме указателя, который мы укажем, будут перенаправлены на статическую страницу html.

Пожалуйста, помогите с этим правилом. Также есть способ легко и просто отключить это без редактирования файла htaccess?

4b9b3361

Ответ 1

Вы можете использовать переменную REMOTE_ADDR в RewriteCond

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

Просто измените условие, чтобы соответствовать IP-адресам, которые вы хотите, для более чем одного вы можете использовать ^ (ip1 | ip2 |... | ipn) $.

О том, как отключить режим обслуживания, не изменяя файл .htaccess, я считаю, что не удается написать программу, которая удалит ее или каким-либо другим образом ее модифицирует, просто ее можно было бы переименовать.

Ответ 2

Я бы хотел немного исправить ответ Винко Врсаловича.

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

вы можете включить это состояние и отключить его через некоторый интерфейс администратора, который может писать в .htaccess(например, разрешения, установленные на 755 или 777). он всегда будет находить .htaccess, вставлять эти две строки в начале и отключать обслуживание, чтобы удалить эти две строки, оставив остальную часть файла нетронутой

Ответ 4

Небольшое улучшение для ответа Александра, нет необходимости использовать регулярные выражения для IP-адреса.

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