Codeigniter 4 запрос файла .htaccess по умолчанию - PullRequest
1 голос
/ 13 июля 2020

Некоторым это может показаться глупым вопросом, но я только что заметил это, пытаясь внедрить SSL-сертификат на свой сайт.

В поле «из коробки» указано значение по умолчанию. .htaccess файл:

    # Rewrite "www.example.com -> example.com"
    RewriteCond %{HTTPS} !=on
    RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
    RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L]

Правильно ли я полагаю, что этот код принудительно удаляет часть www. канонических ссылок на моем веб-сайте?

Если да, то действительно ли это лучше практика? Вот почему пример base_url в Config/App.php - это http://example.com?

Во-вторых, как я уже упоминал, я пытаюсь добавить этот код в файл .htaccess, чтобы реализовать сертификат SSL и принудительно https для каждого URL-адреса - но это вызывает ошибку, если я использую www. (тогда как раньше это не вызывало ошибки), и мои тесты скорости указывают на изобилие перенаправлений, которые все замедляют:

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

Может ли кто-нибудь указать мне правильное направление с помощью правильной канонической структуры ссылок для base_url в файле Config/App.php, нужно ли мне изменить (или выбросить) первый фрагмент кода и как я могу заставить https для работы с моим SSL-сертификатом (и www. в моих URL-адресах).

Я бы предпочел, чтобы мои URL-адреса имели структуру https://www.example.com, а не https://example.com

1 Ответ

1 голос
/ 13 июля 2020

Правильно ли я считаю, что этот код принудительно удаляет 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 нет.

...