mod_rewrite - RewriteCond, если% {HTTP_HOST} НЕ является каким-либо ServerName / ServerAlias ​​

Я хочу знать, можно ли создать условие перезаписи, если% {HTTP_HOST} НЕ является ServerName или любым из перечисленных ServerAlias.

Моя цель - перенаправить любые запросы, сделанные в домен, который не указан как ServerName, ServerAlias ​​', или напрямую на IP ( http://1.1.1.1 , https: //1.1.1.2 . И т. Д. ...).


В настоящее время я добиваюсь этого, выполняя следующие действия как часть перенаправления без SSL на SSL. После моих правил перенаправления без SSL на SSL у меня есть правило перехвата всех, где, если {HTTP_HOST} не является example.com, то перенаправлять на мой реальный домен.

У меня есть аналогичные правила перезаписи для моего SSL-трафика, где у меня есть мое правило перехвата всех после моих правил перезаписи не из WWW в WWW.

<VirtualHost *:80>
ServerName  domain1.com
ServerAlias domain2.com domain3.com
DocumentRoot /home/domain/public_html
RewriteEngine on
RewriteCond %{SERVER_NAME} =domain1.com [OR]
RewriteCond %{SERVER_NAME} =domain2.com [OR]
RewriteCond %{SERVER_NAME} =domain3.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [L,NE,R=permanent]
RewriteCond %{HTTP_HOST} !^example\.com$
RewriteRule ^(.*)$ https://domain1.com$1 [R=301,NC]
</VirtualHost>

Мне любопытно, есть ли лучшая реализация для последнего правила перезаписи, если HTTP_HOST НЕ является ни одним из перечисленных ServerAlias ​​или ServerName.

Мое веб-приложение используется для простого тестирования сети (ping my ip, traceroute и т. д. ), поэтому пользователь может легко получить несколько IP-адресов. Я просто хочу убедиться, что любой сделанный запрос, который не использует один из перечисленных адресов серверов или отправляется непосредственно на IP-адрес, перенаправляется на мой основной домен. Вышеупомянутое работает, я просто хочу знать, есть ли лучший способ.

1
задан 26 June 2018 в 15:22
1 ответ

Sie überdenken dies. Sie müssen nicht die gesamte Logik in RewriteConds einfügen.

Wenn Apache eine Anforderung für einen Host erhält, der keiner der Anweisungen ServerName oder ServerAlias ​​ in einem der VirtualHosts entspricht, wird der Standard-VirtualHost verwendet, dh der eine, die zuerst in der Konfiguration ist. Stellen Sie Ihre Umschreiberegel einfach in eine separate VirtualDomain und stellen Sie sicher, dass eine zuerst geladen wird, indem Sie sie entweder zuerst in der Konfigurationsdatei auflisten oder z. `00-default.conf 'in dem Verzeichnis, in dem Sie Ihre VirtualHosts aufbewahren.

Da die Konfiguration in diesem VirtualHost nur verwendet wird, wenn jemand eine Verbindung herstellt und einen Domainnamen verwendet, der nicht anderweitig aufgeführt ist, müssen Sie keinen negieren der anderen Domainnamen. Die Konfiguration kann einfach

<VirtualHost *:80>
ServerName  default.example.net
DocumentRoot /home/domain/public_html
RewriteEngine on
RewriteRule ^(.*)$ https://example.com$1 [R=301,NC]
</VirtualHost>

sein. Siehe https://serverfault.com/a/520201/120438 für eine ausführlichere Erklärung, wie Apache den zu verwendenden VirtualHost auswählt.

4
ответ дан 3 December 2019 в 17:34

Теги

Похожие вопросы