Назад | Перейти на главную страницу

.htaccess не перенаправляет все запросы на HTTPS

У меня есть следующий файл .htaccess для develop.metrolansing.com:

RewriteEngine On
Redirect 301 /forum https://develop.metrolansing.com/discussions
RedirectMatch ^/$ /discussions/
RewriteRule ^wp-content/uploads/2016/09/(.*)$ /ebay/$1 [R=301,NC,L]

RewriteBase /
RewriteCond %{HTTPS} !^on$
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R,L]

Запросы к http://develop.metrolansing.com перенаправлены на https://develop.metrolansing.com, а также запросы к http://develop.metrolansing.com/forum перенаправлены на https://develop.metrolansing.com/discussions (сейчас сайт находится по адресу / sessions).

Однако, если я приеду http://develop.metrolansing.com/discussions, запрос не перенаправляется на https.

Почему последняя строка неправильно перенаправляет запрос на подкаталог?

Я предполагаю что /discussions это физический каталог, у которого есть собственный .htaccess файл, в котором вы используете mod_rewrite (для обработки вашего Форум)? Директивы mod_rewrite не наследуются по умолчанию, поэтому директивы mod_rewrite в /discussions/.htaccess file полностью переопределит родительские директивы, и ваше перенаправление HTTP на HTTPS не произойдет.

Возможно, вы могли бы включить наследование mod_rewrite, включив следующее в верхнюю часть подкаталога .htaccess файл:

RewriteOptions inherit

Однако было бы предпочтительнее включить директивы из подкаталога .htaccess файл в родительском .htaccess файл (при необходимости внесение изменений).

Вам также следует избегать смешивания mod_alias (Redirect и RedirectMatch) директивы перенаправления с помощью mod_rewrite (RewriteRule) перенаправляет. Во время запроса разные модули обрабатываются в разное время, поэтому результат может сбивать с толку, и вы можете столкнуться с неожиданными конфликтами. mod_rewrite обычно выполняется первым, несмотря на очевидный порядок в .htaccess.