Я редактирую .htaccess
файл..
В RewriteCondition для RewriteRules, HTTPS_HOST
похоже, соответствует только URL-адресам, доступ к которым осуществляется через https://
протокол (ssl). Я где-то видел в документации, что это переменная T / F, которая указывает, был ли доступ к URL-адресу с использованием безопасного протокола.
Однако у меня возникли проблемы с поиском в документации, HTTP_HOST
только совпадения http://
протоколы, или если он действительно соответствует //
относительные протоколы, что означает соответствие обе http://
и https://
.
Может ли кто-нибудь подтвердить так или иначе или указать мне точный источник этой информации?
Кроме того, если HTTP_HOST
Спички обе варианты протокола, как лучше всего фильтровать совпадения только http://
протоколы?
Пример:
<IfModule mod_rewrite.c>
RewriteEngine on
Rewritecond %{HTTP_HOST} ^\/\.(?!some-url).*$
RewriteRule (.*) https://www.example.com/$1 [R=301,L,NC]
</IfModule>
Напротив:
...
Rewritecond %{HTTPS_HOST} ^\/\.(?!some-url).*$
...
Изменить: эксперименты показывают, что HTTP_HOST
делает похоже, соответствуют обоим протоколам, тогда как HTTPS_HOST
соответствует только тогда, когда протокол или URL-адрес начинается с https://
.
.
(Примечание относительно: apache2
тег
ТБХ, я не уверен, какую версию apache я использую. Чтобы попытаться выяснить, чтобы я мог прикрепить правильный тег ..
Я попытался httpd -v
, apache -v
, apache2ctl -S
, apachectl -S
, httpd -S
и т. д. (это не вопрос виртуального хоста, и у меня есть nginx, который, как мне кажется, в любом случае предназначен для этого (виртуального сервера), но я все равно пробовал эти последние 3 команды (виртуальный хост), чтобы увидеть, могут ли они просветить меня о моей версии apache) .
Ответы на эти команды говорят, что либо я должен сначала установить apache2, либо это неизвестная команда.
у меня есть /etc/apache2
папка, но не /usr/local/apache
(следовательно, нет /usr/local/apache/bin/httpd
папка).
)
Такой переменной сервера Apache нет HTTPS_HOST
, только HTTP_HOST
. Если HTTPS_HOST
установлен на вашем сервере, то он специфичен для вашего сервера.
В HTTP_HOST
серверная переменная содержит значение Host
Заголовок HTTP-запроса (т. Е. имя хоста), независимо от используемого протокола (HTTP или HTTPS). Как и все переменные, которые начинаются HTTP_
, они содержат значение соответствующего заголовка HTTP-запроса.
Может ты думаешь о HTTPS
Переменная сервера Apache? Это содержит значение on
или off
в зависимости от того, идет ли запрос по HTTPS или нет. Итак, если у вас нет внешнего прокси, который управляет SSL, тогда это HTTPS
переменная сервера, которую вы используете, чтобы определить, выполняется ли запрос по протоколу HTTP или HTTPS.
Ссылка:
и у меня есть nginx
Итак, для чего вы используете Nginx? Это ваш сервер приложений? Или вы используете его как прокси-сервер? В таком случае, HTTPS
в конце концов, возможно, не стоит использовать переменную.
ОБНОВИТЬ:
Rewritecond %{HTTP_HOST} ^\/\.(?!some-url).*$ RewriteRule (.*) https://www.example.com/$1 [R=301,L,NC]
В этом нет никакого смысла. В состояние (RewriteCond
директива) никогда не будет успешным, поэтому перенаправление будет никогда происходят.
Как упоминалось выше, HTTP_HOST
серверная переменная содержит имя хоста только, например. example.com
или www.example.com
. Он не содержит URL-путь, как вы здесь предполагаете. Ваш состояние пытается соответствовать буквальному /.
не с последующим some-url
(с использованием отрицательного просмотра вперед). В имя хоста никогда не будет начинаться с косой черты (и даже не содержать ее), поэтому он не работает с первым символом.
Я пытаюсь изменить правило htaccess, которое блокировало продление letsencrypt, .... Итак, есть основная проблема (хорошо известно, что получалось 403)
Чтобы сделать исключение из определенного правила для определенного URL-пути, вы должны сделать что-то вроде следующего:
Rewritecond %{REQUEST_URI} !^/\.well-known
RewriteRule (.*) https://www.example.com/$1 [R=301,L,NC]
Это исключает (обратите внимание на !
префикс) любой URL, который начинается /.well-known
. В !
префикс на CondPattern отменяет регулярное выражение. В REQUEST_URI
Переменная server содержит полный URL-путь из запроса (который, естественно, исключает протокол, имя хоста и строку запроса).
Однако вы заявляете, что ".well-known
получал 403 "- возможно, вам потребуется выяснить, что вызвало срабатывание 403-го, и применить исключение к этому правилу.
ИЛИ включите одно исключение в самом верху .htaccess
файл:
# Any requests that start "/.well-known" are ignored
RewriteRule ^\.well-known - [L]
(Обратите внимание на отсутствие префикса косой черты на RewriteRule
шаблон который соответствует URL-пути.)
Первоначально (и, возможно, во вторую очередь, сейчас) я думал, что требование https для просроченного сертификата может быть проблемой.
Да, это определенно будет проблемой. Пользователь получит браузер предупреждение о том, что сертификат недействителен и запрос никогда не достигнет вашего сервера.