Исключить каталог из перенаправления mod_alias

#apache #ssl #redirect #apache2.4 #acme

#apache #ssl #перенаправление #apache2.4 #acme

Вопрос:

Официальная документация Apache httpd рекомендует не использовать mod_rewrite для принудительного применения SSL в домене. Вместо этого предпочтительнее использовать директиву перенаправления из mod_alias.

Следующая гипотетическая конфигурация виртуального хоста

  • принудительно применяет https
  • применяет URI (ы), отличные от www
  • кэширует перенаправление в браузерах благодаря аргументу permanent status .
 # Declare virtual host for http requests
<VirtualHost *:80>
    
    # Declare name-based host
    ServerName example.com
    
    # Declare redirection to https://example.com/ utilizing mod_alias
    Redirect permanent "/" "https://example.com/"

</VirtualHost>
 

Проблема: это также перенаправляет запросы на http://example.com/.well-known/acme-challenge/ URI (ы).

Это проблема, потому что, хотя Let’s Encrypt поддерживает выполнение задачи по использованию URL-адреса SSL, даже со сломанными сертификатами SSL, клиент ACME, который я использую, этого не поддерживает.

Как я могу исключить .well-known/acme-challenge/ каталог из Redirect ?

Я нашел подсказку на этой странице: Выражения на HTTP-сервере Apache.

Показан следующий пример фрагмента кода.

 # Compare the host name to example.com and redirect to www.example.com if it matches
<If "%{HTTP_HOST} == 'example.com'">
    Redirect permanent "/" "http://www.example.com/"
</If>
 

Итак, я попробовал следующее:

 # Declare virtual host for http requests
<VirtualHost *:80>
    
    # Declare name-based host
    ServerName example.com
    
    # Declare redirection to https://example.com/ utilizing mod_alias
    # Exclude 
    <If "%{REQUEST_URI} != '!^/.well-known/.*

К сожалению, похоже, это не работает, что я делаю не так?

Я использую Apache httpd 2.4 на RHEL 8


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

1. RedirectMatch permanent ^(?!/.well-known/acme-challenge/).* "https://example.com" кажется, это помогает, однако я не уверен, что это правильный подход к решению этой проблемы.

">
Redirect permanent "/" "https://example.com/"
</If>

# Utilize a single .well-known/acme-challenge directory across all domains
Alias "/.well-known/acme-challenge/" "/var/www/ssl.com/"

# Declare the /var/www/ssl.com directory
<Directory /var/www/ssl.com>
Options None
AllowOverride None
ForceType text/plain
</Directory>

</VirtualHost>
К сожалению, похоже, это не работает, что я делаю не так?

Я использую Apache httpd 2.4 на RHEL 8

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

1. RedirectMatch permanent ^(?!/.well-known/acme-challenge/).* "https://example.com" кажется, это помогает, однако я не уверен, что это правильный подход к решению этой проблемы.