Перенаправление Apache 308 меняет протокол с https на httpApache

Ответить
Anonymous
 Перенаправление Apache 308 меняет протокол с https на http

Сообщение Anonymous »

Поэтому я недавно обновил свой .htaccess, чтобы реплицировать директиву косой черты каталога с 308 вместо 301, которую обычно использует Apache, чтобы браузер повторял один и тот же запрос вместо того, чтобы менять его на запрос GET и удалять данные из другого запроса. методы.

Код: Выделить всё

# Disable
DirectorySlash Off

# Recreate the DirectorySlash directive with 308
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.+[^/])$ /$1/ [R=308,L]
Это отлично работает в моих локальных тестах, но когда я использую свой тестовый сервер, использующий HTTPS, он внезапно ломается.
В инструментах разработчика Chrome я вижу, что он направлен на незащищенный URL-адрес. или по какой-то причине.
Ошибка:

Код: Выделить всё

Mixed Content: The page at 'https://...' was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint 'http://...'. This request has been blocked; the content must be served over HTTPS.
Я также пробовал добавить такую ​​схему запроса, но это не дало никакого эффекта.

Код: Выделить всё

RewriteRule ^(.+[^/])$ %{REQUEST_SCHEME}://%{HTTP_HOST}/$1/ [R=308,L]
Кто-нибудь знает, почему Apache меняет протокол на небезопасный?
ОБНОВЛЕНИЕ:
Я попробовал проверить протокол и сохранить его в переменной, поскольку REQUEST_SCHEME не всегда определен, и по умолчанию он снова возвращается к http.

Код: Выделить всё

RewriteCond %{HTTPS} on
RewriteRule .* - [E=PROTO:https]
RewriteCond %{HTTPS} !on
RewriteRule .* - [E=PROTO:http]

RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.+[^/])$ %{ENV:PROTO}://%{HTTP_HOST}/$1/ [R=308,L]
Поначалу это работало, но по-прежнему перенаправляет HTTPS на HTTP, когда запрос является POST.
ОБНОВЛЕНИЕ: Как предложил Аркаша, я попробовал жесткое кодирование HTTPS и это работает.

Код: Выделить всё

RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.+[^/])$ https://%{HTTP_HOST}/$1/ [R=308,L]
Это крайне странно, поскольку переменный подход должен давать тот же результат. Первоначальный запрос — HTTPS, поэтому переменная должна в конечном итоге использовать HTTPS так же, как и жестко запрограммированный подход.
Поэтому, я думаю, мне придется использовать проверку на основе домена или какой-либо другой обходной путь. и продублируйте логику для HTTP и HTTPS.
Я чувствую, что это все ненужная гимнастика, чтобы заставить перенаправление 308 работать так, как описано в документации.
Может кто-нибудь объяснит это странное поведение?

Подробнее здесь: https://stackoverflow.com/questions/787 ... ps-to-http
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Apache»