Я использую на одном сервере Apache (порт 81) и NGINX (порт 80). Для www.example.com у меня есть приведенный ниже файл конфигурации NGINX.
Проблема заключается в том, что когда Apache запускается на этом сервере, ВСЕ запросы для www.example.com идут на сервер Apache на порт 81. Это не настроено в восходящем потоке, и www.example.com также не настроен в локальный экземпляр Apache, поэтому ошибки повсюду.
Я не хочу, чтобы это было локальным, а только внешним, как определено в восходящем потоке.
Когда я останавливаю apache, используется восходящий поток, и запросы от nginx идут на серверы, определенные в восходящем потоке, когда я снова запускаю Apache, все запросы маршрутизируются локально на Apache
Итак, как я могу избежать запросов, идущих на Apache, когда это
Нам нужны любые
.org
домен должен перенаправлять на.net
домен documentroot
Я предполагаю, что вы имеете в виду «перезапись», а не внешнее «перенаправление» , как код в вашем вопросе? (Вы также изменили направление требуемой перезаписи, как указано в вашем вопросе, но в любом случае я буду придерживаться того, что вы указали в комментариях ... .org
на .net)
Предполагается, что у вас есть только одноуровневые TLD, как указано в вашем коде (например, .net
, .me
, .info
, ). org
и т. д.), а не многоуровневые «TLD», такие как .co.uk
.
RewriteCond% {HTTP_HOST}! ^ [^.] + \. abc \ .net [ NC] RewriteCond% {HTTP_HOST}! ^ [^.] + \. Example \ .me [NC] RewriteCond% {HTTP_HOST}! ^ [^.] + \. Mysite \ .info [NC] RewriteCond% {HTTP_HOST}! ^ [^.] + \. Xyz \ .org [NC] RewriteCond% {HTTP_HOST}! \. Internal $ [NC] RewriteCond% {REQUEST_URI}! ^ / Collateral / [NC] RewriteRule ^ (. +) / Var / www / domains /% {HTTP_HOST} / httpdocs /% {HTTP_HOST} / $ 1
Попробуйте вместо этого что-нибудь вроде следующего:
# If any of these domains are requested then stop
RewriteCond %{HTTP_HOST} ^[^.]+\.abc\.net [NC,OR]
RewriteCond %{HTTP_HOST} ^[^.]+\.example\.me [NC,OR]
RewriteCond %{HTTP_HOST} ^[^.]+\.mysite\.info [NC,OR]
RewriteCond %{HTTP_HOST} ^[^.]+\.xyz\.org [NC,OR]
RewriteCond %{HTTP_HOST} \.internal$ [NC,OR]
RewriteCond %{REQUEST_URI} ^/collateral/ [NC]
RewriteRule ^ - [L]
# Split the requested host into HOSTNAME + TLD (env vars)
RewriteCond %{HTTP_HOST} ^([^.]+\.[^.]+)\.([^.]+)
RewriteRule ^ - [E=HOSTNAME:%1,E=TLD:%2]
# Change TLD "org" to "net"
RewriteCond %{ENV:TLD} =org [NC]
RewriteRule ^ - [E=TLD:net]
RewriteRule (.+) /var/www/domains/%{ENV:HOSTNAME}.%{ENV:TLD}/httpdocs/%{ENV:HOSTNAME}.%{ENV:TLD}/$1 [L]
Первый блок директив меняет ваши текущие условия. т.е. Он говорит, что если запрос относится к любому из «этих доменов», тогда прекратите обработку, а не ... перезапишите только тогда, когда запрос не соответствует ни одному из «этих доменов». Это упрощает следующие правила, поскольку теперь мы знаем, что запрошенный хост - это тот, который мы хотим переписать, поэтому нам не нужно засорять код дополнительными условиями.
Затем мы разделяем запрошенный HTTP_HOST
в имя хоста (субдомен + домен) и только tld . И сохраните их в двух переменных среды: HOSTNAME
и TLD
соответственно.
Затем мы тестируем env var TLD
env var и при необходимости изменяем его (т. Е. org
в net
).
И, наконец, выполняется безусловная перезапись в соответствующий корень документа и подкаталог (с использованием переменных env, назначенных выше), как в вашем коде. Обратите внимание, что в описании вы указали только «корень документа», но ваш код также включает подкаталог с тем же именем, поэтому я также включил подкаталог.
Это предполагает, что директивы mod_rewrite, указанные в вашем вопросе, выполнены. т.е. Дальше по конфигу нет других зависимых директив? Я добавил флаг L
для удобства.