#http #.htaccess #mod-rewrite #https
#http #.htaccess #мод-перезапись #https
Вопрос:
Во-первых, вот правило .htaccess, которое я использую в настоящее время:
Options FollowSymLinks
RewriteEngine on
RewriteRule (.*) http://example.com/$1 [R=301,L]
Это здорово и перенаправляет каждую ссылку моего старого домена на соответствующую ссылку в новом домене. То есть http://olddomain.com/1.html
перенаправляется на http://example.com/1.html
и так далее.
Но это не перенаправляет https://olddomain.com/1.html
на https://example.com/1.html
И чтобы вы знали, что я пытался, ниже приведены правила, которые мне также довелось протестировать. К сожалению, они создают какой-то цикл, и перенаправление не работает.
Options FollowSymLinks
RewriteEngine on
RewriteRule (.*) example.com/$1 [R=301,L]
и
Options FollowSymLinks
RewriteEngine on
RewriteCond %{SERVER_PORT} ^443$ [OR]
RewriteCond %{HTTPS} =on
RewriteRule (.*) example.com/$1 [R=301,L]
Итак, может кто-нибудь дать мне правила перенаправления http-страниц на http, а https-страниц на https? Спасибо.
Комментарии:
1. кто-нибудь, мне действительно это нужно?!
Ответ №1:
#if https on
RewriteCond %{HTTPS} on
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]
#else
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L]
Комментарии:
1. К сожалению, это вернуло ошибку внутреннего сервера 500. Перенаправление не сработало.
2. Может быть, это потому, что olddomain.com и example.com находятся на одном сервере и также используют один и тот же SSL-сертификат?
3. Извините. Пробелов после запятой там быть не должно. Не знаю, как они туда попали. Я отредактировал сообщение, чтобы исправить его. Дайте мне знать, работает это или нет.
4. Это работает не полностью.
http://olddomain.com
отлично перенаправляет наhttp://example.com
. Но когда я перехожу наHTTPS://olddomain.com
, в адресной строке отображается тот же URL-адрес, при этом отображается содержимое изexample.com
(и содержимое не работает. Нет оформления.)5. Вы очистили кэш своего браузера (или используете другой браузер)? Может быть какая-то проблема с кэшированием. Существуют ли какие-либо другие правила в htaccess для oldomain? Использует ли olddomain ту же папку, что и example.com ? Можете ли вы проверить отправленные заголовки?
Ответ №2:
Ваш HTTPS rewritecond неверен. Cond — это регулярное выражение, а не проверка качества. Это должно быть
RewriteCond %{HTTPS} !^on
%{HTTPS}
Var всегда будет содержать только on
или off
. Никогда =on
, поэтому совпадение завершается неудачей и запускает перенаправление, даже если https действительно включен.
Обновить
Для безусловного перенаправления HTTP-> HTTPS вам необходимо перенаправить на https URL. Ваша версия просто определяет, является ли HTTPS * ВЫКЛЮЧЕННЫМ, затем перенаправляет на тот же URL, вызывая цикл. Что вам нужно, так это:
RewriteCond %{HTTPS} !^on
RewriteRule (.*) https://example.com/$1 [R=301,L]
Комментарии:
1. Марк, это тоже не сработало. Можете ли вы отредактировать свой ответ с полным правилом? (Возможно, я что-то упускаю.)
2. Хорошо, может быть, я не совсем понял. Я хотел, чтобы люди, пришедшие с
HTTP://olddomain.com/1.html
, были перенаправлены наHTTP://newdomain.com/1.html
, а те, кто пришел сHTTPS://olddomain.com/1.html
, были перенаправлены наHTTPS://newdomain.com/1.html
, и так далее. То есть, если они пришли из HTTP-соединения, они будут перенаправлены на HTTP new domain. Если они пришли из соединения HTTPS, они будут перенаправлены на новый домен HTTPS. Для этого мне нужны правила htaccess. Вы можете помочь?