У меня есть следующие настройки на одном из моих хостов:
...<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]