Правильно ли я считаю, что этот код принудительно удаляет www.
Да, но только для запросов HTTP (не HTTPS), как это регулируется первым условием %{HTTPS} !=on
.
Если вы реализуете HTTPS, вам следует удалить первое условие и изменить строку RewriteRule
подстановки на перенаправление на https://...
. Но если вы хотите перенаправить на www
, вам нужно будет отменить logi c также:
# Redirect "example.com -> www.example.com"
# (In fact, redirect hostname that does not start "www.")
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
Хотя этот конкретный метод (как я подразумевал в комментарии) будет не обязательно работать, если у вас есть другие поддомены, если вы не хотите, чтобы все поддомены имели www sub-subdomains?!
Обратите внимание, что это внешнее «перенаправление», а не внутреннее"переписать", как вы сказали в комментарии.
Если да, то действительно ли это лучшая практика?
С точки зрения SEO или с технической точки зрения? С точки зрения SEO разницы нет. Использование поддомена www
, вероятно, может иметь некоторые технические преимущества (изоляция файлов cookie и промежуточных сайтов и т. Д. c.), Хотя это в основном вопрос мнения и зависит от вашей среды. Это действительно ваше дело. Для некоторых доменных имен использование поддомена www
просто выглядит громоздко.
Но важно то, что вы выбираете тот или иной и перенаправляете на канонический URL, чтобы избежать потенциальные проблемы с дублированным контентом.
Использование вершины домена (ie. No www subdomain) - это просто CodeIgniters по умолчанию .
принудительно использовать https для каждого URL-адреса, но это вызывает ошибку, если я использую www.
. Чтобы уточнить, реализуемый вами сертификат SSL должен включать как вершину домена, ie. exmaple.com
и www subdomain, ie. www.example.com
. В противном случае вы, естественно, получите предупреждения безопасности браузера при запросе «другого» (не SSL) имени хоста.
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Этот код обычно подходит для принудительного переключения HTTP на HTTPS (при условии SSL-сертификат установлен на вашем сервере приложений, ie. Вы не используете интерфейсный SSL-прокси или нестандартную реализацию). Однако порядок, в котором вы разместите это правило по отношению к приведенному выше правилу, будет зависеть от того, собираетесь ли вы реализовать HSTS или нет.
Если вы собираетесь внедрить HSTS, вы будете необходимо для перенаправления на HTTPS на том же хосте сначала , перед перенаправлением на www. Это приведет к неизбежному двойному перенаправлению при запросе неканонического http://example.com/
(но это не «плохо»).
Например:
# 1. Redirect to HTTPS on the same host
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# 2. Redirect to non-www to www
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
Если, однако, вы не собираются внедрять HSTS, тогда вы можете отменить два приведенных выше правила и получить не более одного перенаправления для любого неканонического URL-запроса.
Вам необходимо обновить CodeIgniter base_url
в соответствии с вашими предпочтениями www or нет.