#apache #redirect #virtualhost #httpd.conf #mod-alias
#apache #перенаправление #virtualhost #httpd.conf #mod-псевдоним
Вопрос:
Я настраиваю apache 2.4 (docker) в качестве обратного прокси-сервера для распространения разных поддоменов на разные службы docker. Я перенаправляю http-запросы на https, используя Redirect
директиву. Однако один конкретный URL-адрес (часть после домена) не должен перенаправляться на https, а обслуживаться файлами из определенного каталога. Я пытаюсь выполнить это с помощью Alias
директивы, которая не работает.
Я предполагаю, что Redirect
это переопределяет Alias
. Это правда? И как я мог бы достичь своей цели, если это так?
<VirtualHost *:80>
ServerName service.example.com
Alias /exception/ /var/www/exception
Redirect permanent / https://service.example.com/
</VirtualHost>
Я ожидал, что это сработает, но это не так.
Комментарии:
1. Но почему бы вам просто не удалить перенаправление с этого виртуального хостинга?
2. Потому что я хочу, чтобы http-запросы перенаправлялись на https (для безопасности и удобства)
3. В вашем вопросе говорится: «Однако один конкретный домен не должен перенаправляться на https», почему бы вам не удалить перенаправление только с виртуального хоста этого одного домена?
4. Я имею в виду часть после домена, поэтому /exception из service.example.com/exception
Ответ №1:
Во-первых, все перенаправления обрабатываются до обработки псевдонимов, и поэтому к запросу, который соответствует перенаправлению или перенаправлению, никогда не будут применены псевдонимы. Во-вторых, псевдонимы и перенаправления обрабатываются в том порядке, в котором они отображаются в файлах конфигурации, причем первое совпадение имеет приоритет.
Чтобы убедиться, что /exception/
это не соответствует, используйте RedirectMatch
, который разрешает шаблоны регулярных выражений:
RedirectMatch permanent "^/(?!exception/)(.*)" "https://service.example.com/$1"
Комментарии:
1. Работает как шарм. Однако мне пришлось избегать косых черт в регулярном выражении следующим образом:
/
.2. Косые черты @robfuscator не нужно / не нужно экранировать в регулярных выражениях, поэтому вы делаете что-то не так.