Перенаправления не работают, есть ли конфликт с правилами или их порядком? - PullRequest
0 голосов
/ 30 ноября 2019

Мне нужно перенаправить любой входящий трафик, который не является www или https, на www и https. Одной из проблем является попытка добавить еще одно правило, которое обрабатывает весь трафик, который был на rootdomain.com/blog/rest-of-url-title, и отправить его на поддомен https://blog.rootdomain.com/rest-of-url-title

Эточто у меня есть в моем корневом домене htaccess

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^/blog/(.*)$ https://blog.rootdomain.com/$1 [R=302,L]
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [L,NE,R=302]
</IfModule>

Затем в каталоге поддомена блога htaccess у меня есть это (для перенаправления любых не https на https, а остальное на основе Wordpress)

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

При попытке попасть на любой URL-адрес rootdomain.com/blog/rest-of-url-title он перенаправляет на https://www.rootdomain.com/index.php

Вместо перенаправления на поддомен блога, он просто переходит на www, и с тех порзаголовок URL не существует для www, я просто получаю 404.

1 Ответ

0 голосов
/ 01 декабря 2019

Мне пришлось пойти с mod_alias redirectmatch, чтобы заставить его работать так, как я хотел

RedirectMatch 302 ^/blog/(.*)$ https://blog.rootdomain.com/$1

Это странно, потому что строка mod_rewrite в моем исходном htaccess в root имела следующее:

RewriteRule ^blog/(.*) https://blog.rootdomain.com/$1 [R=302,L]

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

Несмотря на это, я знаю, что не стоит смешивать mod_rewrite и mod_alias, этот финал сработал для меня:

RedirectMatch 302 ^/blog/(.*)$ https://blog.skodaminotti.com/$1
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [L,NE,R=302]
</IfModule>

Все равно хотелось бы услышатьесли кто-нибудь знает, почему переписывающее устройство не сработает.

...