У меня есть следующий файл .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
.