Не работает для меня ... что я делаю не так? У меня ужасная ошибка слишком большого количества перенаправлений. Я пытаюсь принудительно настроить все свои 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
и все остальные домены перенаправляют на это.Вместо этого попробуйте следующее в верхней части .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 только после того, как убедитесь, что он работает нормально, чтобы избежать проблем с кешем браузера.