Перенаправить http на https только на домашней странице - PullRequest
0 голосов
/ 13 января 2019

Я прочитал много похожих вопросов, но не нашел решения. Я хочу перенаправить HTTP на HTTPS только на домашней странице.

Я ничего не знаю о .htacces.

Здесь вы можете увидеть, как он выглядит сейчас, он содержит код для скрытия .php расширений, прекращает кэширование и перенаправляет www на не-www. Я нашел эти примеры онлайн:

## EXPIRES CACHING ##
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access 1 year"
ExpiresByType image/jpeg "access 1 year"
ExpiresByType image/gif "access 1 year"
ExpiresByType image/png "access 1 year"
ExpiresByType text/css "access 1 month"
ExpiresByType text/html "access 1 month"
ExpiresByType application/pdf "access 1 month"
ExpiresByType text/x-javascript "access 1 month"
ExpiresByType application/x-shockwave-flash "access 1 month"
ExpiresByType image/x-icon "access 1 year"
ExpiresDefault "access 1 month"
</IfModule>
## EXPIRES CACHING ##


#AddHandler application/x-httpd-php54  .php54 .php
AddHandler application/x-httpd-php70 .php

RewriteEngine On
RewriteBase /
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ $1.php [NC,L]

RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

1 Ответ

0 голосов
/ 13 января 2019

Чтобы перенаправить только домашнюю страницу в HTTPS (и канонизировать поддомен www), добавьте в начало файла .htaccess следующее:

RewriteEngine On

RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+) [NC]
RewriteRule ^$ https://%1/ [R=302,L]

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

RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

Также необходимо изменить существующий редирект с www на не-www в конце файла, иначе он перенаправит домашнюю страницу обратно на HTTP. Это также следует переместить в начало файла .htaccess сразу после перенаправления HTTP-HTTPS.

RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.+)$ http://%1/$1 [R=301,L]

Обратите внимание, что я изменил ^(.*)$ на ^(.+)$, чтобы соответствовать 1 или более символам - таким образом избегая домашней страницы. Вы также можете упростить это до (.+) (т.е. удалить якоря), если хотите. Regex по умолчанию жадный, якоря лишние.

Краткое описание

RewriteEngine On

# Only redirect homepage to HTTPS (and remove www subdomain)
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+) [NC]
RewriteRule ^$ https://%1/ [R=302,L]

# Remove www subdomain on other pages (HTTP only)
# >>> This is moved from the end of the htaccess file
RewriteCond %{HTTP_HOST} ^www\.(.+) [NC]
RewriteRule (.+) http://%1/$1 [R=302,L]

# Remainder of htaccess file....
:
:

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


В сторону: Вы можете удалить директиву RewriteEngine, которая появится позже в файле, если хотите. Это необязательно, только требуется , чтобы это произошло один раз. Быть на вершине, перед директивами mod_rewrite, логично (но не обязательно).

...