Правило перезаписи вызывает «частично зашифрованное соединение» в Firefox & Chrome - PullRequest
0 голосов
/ 21 января 2012

Вопрос основан на вопросе htaccess rewriterule: перенаправить http на https или https на http (в обе стороны) в зависимости от введенного URL . Отличное решение (благодаря Ульриху Палха) выглядит так:

RewriteEngine on
RewriteBase /

#determine if page is supposed to be http
#if it has p=home or p=home1 or qqq=home in querystring
RewriteCond %{QUERY_STRING} (^|&)(p=home1?|qqq=home)(&|$) [NC,OR]
#or if query string is empty
RewriteCond %{QUERY_STRING} ^$
#set env var to 1
RewriteRule ^ - [E=IS_HTTP:1]


#all pages that are supposed to be http redirected if https
RewriteCond %{HTTPS} on
RewriteCond %{ENV:IS_HTTP} 1
RewriteRule ^ http://%{HTTP_HOST}%{REQUEST_URI} [R,L=301]

#all other pages are sent to https if not already so
RewriteCond %{HTTPS} off
RewriteCond %{ENV:IS_HTTP} !1
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R,L=301]

К сожалению, как только я добавляю этот код в файл .htaccess, все работает нормально, но https начал выглядеть неработающим, если содержит ссылки на css или рисунки с сервера, хотя пути относительно.

На странице ниже (https://www.mydomain.com/?p=welcome), отображаемой с разорванным SSL-соединением, браузер FF сообщает: «Ваше соединение с этим сайтом шифруется только частично»

<head>
<title>ddd</title>
</head>
<body>
Hello
<img src="/gfx/stars/help.gif" alt="" /> 
</body>
</html>

Почему?

Как только я удаляю <img src="/gfx/stars/help.gif" alt="" /> со страницы, FF отображает https нормально, тогда строка URL-адреса зеленая (отображается сертификат SSL). Эта же ошибка появляется при тестировании с помощью Google Chrome.

Итак, что не так с <img src="/gfx/stars/help.gif" alt="" />? Путь относительный. То же самое происходит, если я добавлю

<link rel="stylesheet" type="text/css" href="/css/mycss.css" />

Ответы [ 2 ]

2 голосов
/ 21 января 2012

После загрузки страницы и запуска браузером запроса изображений и т. Д. Через https. Из-за того, что я прочитал ваши правила перезаписи, потому что путь к изображению не имеет строки запроса, IS_HTTP установлен в 1. Тогда ваши правила перезаписи будут перенаправлять к http-версии URL-адреса изображения, поэтому браузер жалуется

1 голос
/ 21 января 2012

Один из способов исправить это - избежать ресурсов обработки (поскольку у вас все равно нет специальных правил для них), как указано ниже

RewriteEngine on
RewriteBase /

#if its a resource (add others that are missing)
RewriteCond %{REQUEST_URI} \.(gif|css|png|js|jpe?g)$ [NC]
#do nothing
RewriteRule ^ - [L]

#rest of existing rules go here
...