У меня есть многоязычный сайт на Grav CMS и два домена: grav-site.pl
и grav-site.com
Я хочу перенаправить:
grav-site.pl/en
-> grav-site.com
grav-site.com/pl
-> grav-site.pl
В базе гравитационного кноляжа я нашел решение который должен работать, поэтому я добавляю это в свой .htaccess
## Begin - Multilanguage Setup
RewriteRule ^en/?$ "http://grav-site.com" [R=301,L]
RewriteRule ^pl/?$ "http://grav-site.pl" [R=301,L]
# handle sub pages, exclude admin path
RewriteCond %{REQUEST_URI} !(admin) [NC]
RewriteRule ^en/(.*)$ "http://grav-site.com/$1" [R=301,L]
RewriteCond %{REQUEST_URI} !(admin) [NC]
RewriteRule ^pl/(.*)$ "http://grav-site.pl/$1" [R=301,L]
# End - Multilanguage Setup
но когда я иду в http://grav-site.com/pl
ничего не случилось (нет перенаправления) и движок CMS удалить /pl
Как изменить записи .htaccess, чтобы обеспечить правильное перенаправление?
P.S. остальная часть .htaccess https://github.com/getgrav/grav/blob/develop/webserver-configs/htaccess.txt
Я добавляю записи из сообщения выше после
<IfModule mod_rewrite.c>...</IfModule>
, только в конце файла
Казалось бы, это основная причина вашей проблемы. Эти директивы (перенаправления) должны располагаться ближе к началу файла, прежде чем ваши существующие перезаписи - в противном случае они никогда не будут обработаны.
"Фронт-контроллер" (в середине файла, который начинается ## Begin - Index
) захватывает все запросы и направляет их через index.php
(ваш «фронт-контроллер»), любые последующие директивы mod_rewrite вряд ли будут обработаны, если только запрос не относится к физическому файлу.
Как общее правило, внешние перенаправления всегда должен идти раньше внутренние перезаписи.
По той же причине я бы поставил под сомнение расположение ваших директив "безопасности" (в блоке, который начинается ## Begin - Security
), который также следует за вашим передним контроллером. На самом деле это может быть нормально - они обрабатываются только для существующих файлов. Однако, опять же, как правило, директивы блокировки / безопасности обычно располагаются в верхней части файла (даже до перенаправления).
Раскомментируйте строку RewriteBase в файле .htaccess, который https://github.com/getgrav/grav/blob/develop/webserver-configs/htaccess.txt
Как перенаправить с www.example1.com на www.example2.com
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www.example1.com [NC]
RewriteRule ^(.*) http://www.example2.com/$1 [L,R=301]
Перенаправление с www.example.com на example.com и наоборот
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www.example.com$ [NC]
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L]
и наоборот
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteRule ^(.*) http://www.example.com/$1 [L,R=301]
Редирект со всех несуществующих поддоменов на сайт:
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^(.*).example.com [NC]
RewriteRule ^(.*)$ http://example.com/$1 [L,R=permanent]
Перенаправить все запросы веб-сайта на конкретную веб-страницу:
RewriteEngine On
RewriteBase /
RewriteRule ^(.*)$ http://example.com/desired_page/ [L,R=permanent]