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

В чем разница между HTTP_HOST и HTTPS_HOST в файлах apache .htaccess?

Я редактирую .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 для просроченного сертификата может быть проблемой.

Да, это определенно будет проблемой. Пользователь получит браузер предупреждение о том, что сертификат недействителен и запрос никогда не достигнет вашего сервера.