Переопределяет ли директива перенаправления настроенные псевдонимы

#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:

Из документов mod_alias:

Во-первых, все перенаправления обрабатываются до обработки псевдонимов, и поэтому к запросу, который соответствует перенаправлению или перенаправлению, никогда не будут применены псевдонимы. Во-вторых, псевдонимы и перенаправления обрабатываются в том порядке, в котором они отображаются в файлах конфигурации, причем первое совпадение имеет приоритет.

Чтобы убедиться, что /exception/ это не соответствует, используйте RedirectMatch , который разрешает шаблоны регулярных выражений:

 RedirectMatch permanent "^/(?!exception/)(.*)" "https://service.example.com/$1"
 

Комментарии:

1. Работает как шарм. Однако мне пришлось избегать косых черт в регулярном выражении следующим образом: / .

2. Косые черты @robfuscator не нужно / не нужно экранировать в регулярных выражениях, поэтому вы делаете что-то не так.