htaccess принудительно использует https без www в одном перенаправлении для всех страниц - PullRequest
0 голосов
/ 28 июня 2018

Я хотел бы перенаправить всех на мой сайт https: // (не https://www) и принудительно установить HTTPS в одном перенаправлении. Мои соответствующие части .htaccess:

# Check if HTTPS and WWW
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [OR,NC]
RewriteCond %{https} off
# Force HTTPS and remove WWW
RewriteRule ^(.*)/$ https://example.com/$1 [R=301,L]

Проблема? Это не работает для подстраниц!

Хотя он работает для главной страницы (например, http://www.example.com перенаправляет на https://example.com),, он не работает для подстраниц (например, http://www.example.com/contact sholud перенаправить меня на https://example.com/contact но только www удален, и я в конечном итоге на сайте, не являющемся https: http://example.com/contact).

Как изменить мои правила .htaccess, заставить HTTPS и удалить WWW для моего сайта и всех страниц сайта в одном перенаправлении?

После изменений: работает для подстраниц, но в 2 перенаправлениях. Можно ли это сделать только в одном?

Благодаря ответу Nisarg и немного копаний мой сайт теперь правильно перенаправляет на HTTPS даже на подстраницах. Ура!
Соответствующий код .htaccess теперь выглядит так:

RewriteEngine On

RewriteCond %{HTTPS}        =off   [OR]
RewriteCond %{HTTP_HOST}    !^example\.com$
RewriteRule ^(.*)$          "https://example.com/$1" [R=301,L]

# remaining htaccess mod_rewrite CODE for WordPress
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

К сожалению, для обработки требуется 2 шага. Итак, вопрос до сих пор: это можно сделать за 1 редирект ?

1 Ответ

0 голосов
/ 28 июня 2018

Попробуйте следующее: (Догадываясь, что вы используете index.php)

RewriteEngine On

# Redirect to www
RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]

#
RewriteRule ^ - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
#
# If the requested path and file is not /index.php and the request
# has not already been internally rewritten to the index.php script
RewriteCond %{REQUEST_URI} !^/index\.php
# and the requested path and file doesn't directly match a physical file
RewriteCond %{REQUEST_FILENAME} !-f
# and the requested path and file doesn't directly match a physical folder
RewriteCond %{REQUEST_FILENAME} !-d
# internally rewrite the request to the index.php script
RewriteRule ^ index.php [L]

Убедитесь, что вы очистили кеш браузера перед тестированием этого изменения.

...