Назад | Перейти на главную страницу

apache2.4 mod_rewrite исключить конкретный псевдоним каталога / uri

У меня есть следующие настройки на одном из моих хостов:

...<VirtualHost *:80>
    ServerName cloud.domain.de
    ServerAdmin webmaster@domain.de
    ServerSignature Off

    Alias "/.well-known/acme-challenge" "/var/www/domain.de/vh-www/htdocs/public/.well-known/acme-challenge"

    <Directory "/var/www/domain.de/vh-www/htdocs/public/.well-known/acme-challenge">
      Require all granted
      ForceType 'text/plain'
    </Directory>

    <ifmodule mod_rewrite.c>
      RewriteEngine On
      RewriteCond %(REQUEST_URI) !/\.well\-known/acme\-challenge/?.*
      RewriteCond %{HTTPS} off
      # RewriteRule ^\.well-known/acme-challenge/([A-Za-z0-9-]+)/?$ - [L]
      RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
    </ifmodule>...

Я хочу добиться того, чтобы mod_rewrite не перезаписывал URL-адрес, когда URL-адрес http://cloud.domain.de/.well-known/acme-challenge/ доступен.

Я уже пробовал разные подходы, один из которых был закомментированным RewriteRule выше, но, похоже, ничего не работает: сервер каждый раз перезаписывает его на https.

Когда я отключаю перезапись в целях тестирования, я могу получить доступ к URL-адресу псевдонима ...

Как мне добиться того, чтобы конкретный URL-адрес не переписывался?

Как это :

<ifmodule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_URI} !^/\.well\-known/acme\-challenge/
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</ifmodule>

Если URI совпадает start with /.well-known/acme-challenge/ запрос не будет перенаправлен

@mark Правильная версия «более короткого и надежного» варианта:

RewriteCond %{REQUEST_URI} ^/\.well\-known
RewriteRule . - [L]

ИМХО короче и надежнее:

RewriteCond %{REQUEST_URI} ^\.well\-known
RewriteRule - [L]

вы можете в конечном итоге добавить / acme-challenge /, но если вы хотите отлаживать его с помощью произвольного файла, например ./well-known/test, это решение работает лучше

что он на самом деле делает: проверяет, начинается ли запрос с .well-known, в этом случае ничего не делает (значение -) и делает его последним правилом [L]