.htaccess редирект кроме сегмента пути + другой редирект для остальных - что не так? - PullRequest
0 голосов
/ 13 июля 2020

Что не так с моим кодом? Примечание. Поскольку оба домена используют один и тот же .htaccess, хост всегда должен соответствовать «.de» (запросы, которые уже были перенаправлены на домен «.com», следует игнорировать).

# 1. Redirect all non DE stuff to other domain (.com)
RewriteCond %{REQUEST_URI} !^/de/ [NC]
RewriteCond %{HTTP_HOST} ^(dev)\.(domain)\.de$ [NC]
RewriteRule ^(.*)$ https://%1.%2.com/$1 [L,R=301,NC,NE]

# 2. Redirect only DE stuff (below /de/) and stay inside same domain
RewriteCond %{REQUEST_URI} ^/de/ [NC]
RewriteCond %{HTTP_HOST} ^(dev)\.(domain)\.de$ [NC]
RewriteRule ^de/(.*)$ https://%1.%2.de/$1 [L,R=301,NC,NE]

Второй набор кажется прекрасным . Хотя первый RewriteCond кажется необязательным (почему?).

Но первый набор также перенаправляет "domain.de/de/thing" на что-нибудь дикое ("domain.com/index.php" ). Хотя он должен соответствовать только «^ / de /»?

Обновление: кажется невозможным использование автоматических правил (см. Комментарии). Требуются два рулсета. Один для явного перенаправления всех сегментов пути EN, другой для перенаправления всех сегментов пути DE:

# 1. Redirect all non DE stuff to other domain (.com)
RewriteCond %{REQUEST_URI} ^/(english-segment-1|english-segment-2|english-segment-3)($|/) [NC]
RewriteCond %{HTTP_HOST} ^(dev)\.(domain)\.de$ [NC]
RewriteRule ^(.*)$ https://%1.%2.com/$1 [L,R=301,NC,NE]

# 2. Redirect only DE stuff (/de and below /de/) and stay in same domain
RewriteCond %{REQUEST_URI} ^/de($|/) [NC]
RewriteCond %{HTTP_HOST} ^(dev)\.(domain)\.de$ [NC]
RewriteRule ^de($|/)(.*)$ https://%1.%2.de/$2 [L,R=301,NC,NE]
...