.Правила Htaccess для перенаправления соответствующих HTTP-ссылок на HTTP и HTTPS на HTTPS?

#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. Вы можете помочь?