У меня есть защищенная папка, для которой требуется SSL. Я настроил его в IIS (6), чтобы требовать SSL. Мы не хотим, чтобы посетители встречались с ошибкой «соединение должно быть безопасным», поэтому я изменил страницу с ошибкой 403.4, добавив в нее следующее:
<script type="text/javascript">
function redirectToHttps() {
var httpURL = window.location.hostname+window.location.pathname;
var httpsURL = "https://" + httpURL ;
window.location = httpsURL ;
}
redirectToHttps();
</script>
И это решение отлично работает с любым браузером, кроме IE7. В любом другом браузере, если вы введете http://www.mysite.com/securedfolder он автоматически перенаправит вас на https://www.mysite.com/securedfolder без сообщения или чего-то еще (предполагаемое действие). Но ТОЛЬКО в Internet Explorer 7 откроется страница с надписью
The website declined to show this webpage
Most Likely Causes:
This website requires you to log in
Мы, конечно, этого не хотим. Я убедился, что javascript включен, а настройки безопасности не действуют, даже когда я устанавливаю их на самый низкий уровень, я получаю ту же ошибку.
Мне интересно, кто-нибудь еще видел это раньше?
Я предполагаю, что функция IE «Дружественное сообщение об ошибке» заменяет вашу страницу с ошибкой той, которую, по его мнению, легче понять людям. В соответствии с эта статья в kb, «дружественное сообщение об ошибке» не используется, если ответ сервера достаточно велик, и предлагает заполнить настраиваемую страницу ошибки пробелами до тех пор, пока он не станет больше.
Я никогда не испытывал этого раньше, но мне интересно, почему вы используете для этого javascript? Когда-либо пробовал с
<meta http-equiv="REFRESH" content="0;url=http://www.the-domain-you-want-to-redirect-to.com"> ?
Я справился с этой проблемой легко, поскольку я использую ASP.NET. Вы создаете абстрактный класс страницы или HttpModule (все веб-приложение), которые проверяют, (!Request.IsSecure)
... перенаправить с 301 на защищенную страницу.
На стороне сервера замечательно то, что он будет работать без javascript. Я почти уверен, что вы можете сделать то же самое на любом языке (Java, PHP, ruby, даже C ++, если вы придерживаетесь старой школы).