Mod_rewrite на основе ip
Я хотел бы реализовать mod_rewrite, чтобы разместить мой сайт в обслуживании. В основном все IP-адреса, кроме указателя, который мы укажем, будут перенаправлены на статическую страницу html.
Пожалуйста, помогите с этим правилом. Также есть способ легко и просто отключить это без редактирования файла htaccess?
Ответы
Ответ 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]