Назад | Перейти на главную страницу

перенаправление htaccess на основе диапазона IP

У меня тут небольшие проблемы. У меня есть интранет-сервер wordpress с двумя интерфейсами и двумя разными IP-адресами. Этот сервер находится в частном MPLS, где нет DNS-сервера. Вместо доменного имени пользователи используют IP-адреса.

Я хотел бы переписать адрес в htaccess для одной из моих подсетей, чтобы он использовал такое правило перенаправления:

RewriteEngine On
RewriteBase /
RewriteCond %{REMOTE_ADDR} ^10\.71\.(([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-4]))\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))|255\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-4])))$
RewriteRule ^(.*)$ http://10.71.2.246 [R=301,L]

Это правило не работает.

Регулярное выражение удаленного адреса должно быть диапазоном адресов 10.71.0.1 - 10.71.255.254

У меня есть несколько правил перезаписи, которые, как мне кажется, не работают.

Моя проблема в том, что когда я хочу получить доступ к некоторым носителям, прикрепленным к веб-сайту, из диапазона 10.71.x.x, он перенаправляет меня на 10.1.2.xx, который является второй подсетью. Эти файлы были загружены из дочерней сети 10.1.2.xx, поэтому они жестко привязаны к 10.1.2.180/xxxxxxx.pdf

Итак, процесс выглядит следующим образом -

  1. Пользователь заходит на сайт Wordpress по адресу http: //10.71.x.y
  2. Веб-сайт возвращается, но включает медиа, жестко привязанные к 10.1.x.y. e.g <a href="http://10.1.x.y/mediafile.pdf">...</a>
  3. Пользователь нажимает на ссылку, которая не работает.

Для этой проблемы перезапись htaccess не сработает. Перезапись полезна, когда пользователь запрашивает у сервера один путь, а вы хотите направить его по другому пути. В вашем случае клиент щелкает ссылку, которую он не может достичь, поэтому запрос никогда не попадает на сервер для перезаписи.

Изменение IP-адреса с 10.1.x.y на 10.71.x.y в браузере вручную (как в комментарии к предыдущему ответу) полностью исключает необходимость перезаписи. (На самом деле, если бы перезапись сработала, вы, вероятно, просто попали бы в цикл перенаправления, потому что каждый отдельный запрос приходил бы с адреса 10.71, соответствовал бы условию и был бы перезаписан)

На мой взгляд, есть несколько вариантов -

  1. Заставьте Wordpress везде использовать относительные URL-адреса, чтобы все запросы направлялись на тот же IP-адрес, который пользователь изначально ввел в своем браузере. К сожалению, Wordpress, похоже, действительно любит полностью квалифицированные URL-адреса по причинам, которые меня не интересуют.
  2. Настройте записи DNS или хостов на обоих сайтах пользователей, чтобы они могли войти http://some.intranet.url в своем браузере и разрешить ему правильный IP-адрес. Затем это означает обновление Wordpress для использования этого URL-адреса, что также может потребовать использования плагина для поиска и перезаписи старых URL-адресов в базе данных. (Опять же, Wordpress очень любит набивать повсюду полные URL-адреса).
  3. Используйте какой-то фильтр (я был бы удивлен, если бы он не существовал как плагин Wordpress), чтобы сканировать HTML-код Wordpress после его создания и заменять любые полностью определенные ссылки относительными.

Вариант 3 немного некрасивый, но, вероятно, самый простой вариант. Это просто означает найти плагин, который может сканировать страницы на предмет http://10.a.b.c и удалите его, чтобы ссылка на http://10.1.2.3/media/file.pdf становится /media/file.pdf. (Примечание: в зависимости от вашей настройки может потребоваться небольшая настройка, чтобы убедиться, что он переписывает все ссылки, на которые он должен, но ничего не делает)

Регулярное выражение удаленного адреса должно быть диапазоном адресов 10.71.0.1 - 10.71.255.254

Ваше регулярное выражение можно было бы значительно упростить. Вместо этого я бы посмотрел на это как на любой IP-адрес, который начинается 10.71, но исключает 10.71.0.0 и 10.71.255.255 - похоже, это именно то, что вы описываете. (?)

RewriteEngine On
RewriteCond %{REMOTE_ADDR} ^10\.71
RewriteCond %{REMOTE_ADDR} !^10\.71\.0\.0$
RewriteCond %{REMOTE_ADDR} !^10\.71\.255\.255$
RewriteRule ^ http://10.71.2.246%{REQUEST_URI} [R=302,L]

Я предполагал, что вы захотите перенаправить и сохранить URL-путь, а не перенаправлять все запросы в корень документа?

В настоящее время это 302 (временное) перенаправление. Изменить на 301 (постоянный), только если вы уверены, что он работает нормально. Перед тестированием убедитесь, что вы очистили кеш браузера.

Однако это действительно кажется немного странным ... REMOTE_ADDR это локальный IP-адрес пользователя, подключающегося к сайту (при условии, что прокси-серверы не задействованы), но вы перенаправляетесь на один из тех же IP-адресов?