Apache 2.4 переписывает URL-адреса каталогов без косой черты в https://default_site/dir/ вместо сохранения домена

#apache #http #ssl #url-rewriting

Вопрос:

Это относительно недавнее изменение поведения и, по-видимому, связано только с запросами, которые включают заголовок запроса «Обновление-Небезопасные запросы: 1».

Apache начал переписывать такие запросы для сайтов, которые доступны только по протоколу HTTP, на URL-адрес HTTPS, используя имя сайта по умолчанию вместо простого добавления / в конце запрошенного URL-адреса.

 Example: URL submitted in browser: http://www.example.com/blah
Intended redirect: 301 to http://www.example.com/blah/
Instead redirects: 301 to https://default.site.configured/blah/
 

Это происходит независимо от того, является ли это именованным виртуальным по тому же адресу, что и сервер по умолчанию, или виртуальным, использующим отдельный адрес с отдельными директивами прослушивания.

Я понимаю все аргументы в пользу идеи о том, что все всегда должно быть зашифровано, и я не хочу вступать в дискуссию по этому поводу. Этот сайт не считает компромиссы желательными в настоящее время.

Сайт по умолчанию имеет SSL и настроен на перенаправление HTTP->HTTPS, но >www.foo.com сайт не настроен таким образом и в настоящее время не желает внедрять SSL.

Есть ли какой-либо способ заставить Apache 2.4 игнорировать этот заголовок «Обновить» и просто переписать URL-адрес по желанию, а не изменять доменное имя?

Ответ №1:

Поразмыслив над этим еще немного, я, наконец, нашел источник своих бед.

Это происходит, когда у вас есть виртуальные хосты на основе IP и вы не настроили для них имя с помощью директивы «Имя_сервера».

tl;dr: Если у вас возникла эта проблема, попробуйте добавить «Имя сервера www.example.com» директива в определении виртуального хоста для сайта, и это должно ее решить.

Подробности: Это не произойдет, пока вы не столкнетесь с URL-адресом, который требует перезаписи, отличной от добавления завершающего /. (т. Е. Если вы получаете запрос, который не содержит заголовок «Обновление-Небезопасные запросы: 1», он получает только завершающий / добавленный, но если вы получаете его с этим заголовком, он также пытается переписать протокол на https, который запускает полную перезапись URL-адреса).

В моем случае имя хоста по умолчанию имело конфигурацию SSL, поэтому оно не возвращалось к HTTP после перезаписи или не отклоняло перезапись как недопустимую.

YMMV, я не стал продолжать проводить исчерпывающую проверку всех перестановок, как только нашел решение.