Назад | Перейти на главную страницу

Пытаюсь заставить WWW и HTTPS, и только два из моих трех правил будут работать

Не работает для меня ... что я делаю не так? У меня ужасная ошибка слишком большого количества перенаправлений. Я пытаюсь принудительно настроить все свои URL-адреса на WWW и https, хотя я бы согласился просто на возможность принудительно все на https

    RewriteEngine on
    RewriteBase /

    RewriteCond %{http_host} ^all-service-musical.com [nc]
    RewriteRule ^(.*)$ https://www.all-service-musical.com/$1 [r=301,nc]

    RewriteCond %{http_host} ^asmusic.org [nc]
    RewriteRule ^(.*)$ https://www.all-service-musical.com/$1 [r=301]

    RewriteCond %{http_host} ^www.all-service-musical.com [nc]
    RewriteRule ^(.*)$ https://www.all-service-musical.com/$1 [r=301,nc]

Первые два правила отлично работают вместе, но третье правило, чтобы попытаться изменить URL-адрес www на https, ломает все ... любые идеи?

Я также попытался удалить весь приведенный выше код и попытался выполнить часть задачи с http на https, используя:

RewriteEngine On
#RewriteCond %{HTTPS} off
#RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

Я также получаю слишком много ошибок перенаправления при использовании вышеуказанного подхода.

Я тоже пробовал это само по себе:

RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://all-service-musical.com/$1 [R,L]

Те же результаты ... разрывает сайт со слишком большим количеством ошибок переадресации.

MrWhite ... Спасибо, что нашли время ответить, код, который сейчас находится в файле htaccess:

RewriteEngine on
RewriteBase /
RewriteCond %{http_host} ^www.all-service-musical.com [nc]
RewriteRule ^(.*)$ https://all-service-musical.com/$1 [r=301,nc]

RewriteCond %{http_host} ^asmusic.org [nc]
RewriteRule ^(.*)$ https://all-service-musical.com/$1 [r=301]

RewriteCond %{http_host} ^www.asmusic.org [nc]
RewriteRule ^(.*)$ https://all-service-musical.com/$1 [r=301] 

Поскольку сертификат предназначен для all-service-musical.com (я начинаю задаваться вопросом, была ли настройка таким образом плохим советом хостинговой компании), я подумал, что попробую переписать код, чтобы целью была версия, отличная от WWW, однако у меня все еще есть та же проблема, когда я набираю all-service-musical.com в адресной строке, он оказывается незащищенным, когда у меня был исходный код, версия WWW при вводе напрямую выглядела бы как незащищенная.

Я думаю, что этот фрагмент кода, который вы предоставили:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}/$1 [R=302,L]

Если все остальное будет удалено, оно должно работать само по себе до определенной степени, но это приведет к поломке сайта из-за слишком большого количества ошибок перенаправления, даже если это единственное, что есть в файле htaccess.

Мне нравятся и ценятся ваши советы по использованию редиректа 302, пока я не получу для этого правильный код. Мы очень ценим любые дальнейшие советы о том, где может скрываться моя проблема.

Если при использовании всех этих директив у вас постоянно возникают циклы перенаправления, очистите кеш браузера. Все они не должны вызывать циклы перенаправления. По этой причине рекомендуется тестировать с 302 (временными) перенаправлениями и менять на 301 (постоянное) только тогда, когда вы уверены, что они работают нормально.

RewriteCond %{http_host} ^all-service-musical.com [nc]
RewriteRule ^(.*)$ https://www.all-service-musical.com/$1 [r=301,nc]

RewriteCond %{http_host} ^asmusic.org [nc]
RewriteRule ^(.*)$ https://www.all-service-musical.com/$1 [r=301]

RewriteCond %{http_host} ^www.all-service-musical.com [nc]
RewriteRule ^(.*)$ https://www.all-service-musical.com/$1 [r=301,nc]

Ваши первые три RewriteRule во всех директивах отсутствует L flag, поэтому обработка будет продолжена для следующего правила и т. д. Ваше третье правило, которое пытается «изменить URL-адрес www на https», обязательно приведет к циклу перенаправления, поскольку вы просто перенаправляете его на себя. Чтобы перенаправить с HTTP на HTTPS, вам необходимо сначала проверить HTTP (т.е. HTTPS является off), как и в последующих попытках.

RewriteEngine On
#RewriteCond %{HTTPS} off
#RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

Ваше 4-е правило перенаправляет на HTTPS на одном и том же хосте - это потенциально хорошая идея, если для ваших разных доменов (у вас их всего два?) Установлен сертификат безопасности.

RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://all-service-musical.com/$1 [R,L]

Это перенаправление на вершину домена, а не на субдомен www (противоположность первым трем правилам). Это может потенциально привести к возникновению цикла перенаправления, если код сайта сам отправит перенаправление на канонический хост.

Предположения:

  • У вас есть одно каноническое имя хоста www.all-service-musical.com и все остальные домены перенаправляют на это.
  • Сертификат SSL устанавливается непосредственно на сервере приложений и не управляется внешним прокси.
  • Вы не внедряете HSTS. (В этом случае вам нужно сначала перенаправить на HTTPS на том же хосте и убедиться, что у вас установлен сертификат SSL в каждом домене.)

Вместо этого попробуйте следующее в верхней части .htaccess файл:

RewriteEngine On

# Redirect non-canoncial hostname
RewriteCond %{HTTP_HOST} !^www\.all-service-musical\.com$
RewriteRule (.*) https://www.all-service-musical.com/$1 [R=302,L]

# Redirect to HTTPS
# NB: This only applies if the canonical hostname is requested over HTTP
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}/$1 [R=302,L]

Как упоминалось выше, меняйте 302 на 301 только после того, как убедитесь, что он работает нормально, чтобы избежать проблем с кешем браузера.