.htaccess, как объединить и добавить язык в путь - PullRequest
0 голосов
/ 06 ноября 2018

У меня проблемы с объединением нескольких правил. Я просто не могу понять, как писать в .htaccess.

Мой .htaccess:

RewriteEngine on
RewriteRule (.*) web/$1 [L]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

Как бы я это сочетал? Теперь работает только первое правило web/$1.

А также как я могу добавить один дополнительный редирект на язык со всем этим?

Чтобы уточнить, что я хотел бы сделать:

  • пользователь пишет example.com, поскольку мой индексный файл находится в /web корневого каталога, он идет туда (это работает)

  • теперь он должен перенаправить его на www.example.com не работает

  • после этого добавьте /en к URL, чтобы он выглядел как www.example.com/en - пока не можете понять.

Я проверил другие вопросы, но я действительно не понимаю, как это работает, любая помощь приветствуется.

1 Ответ

0 голосов
/ 06 ноября 2018

Основная проблема в том, что у вас есть директивы в неправильном порядке. Вы должны перенаправить на www.example.com до переписать на web/<whatever>.

Например:

RewriteEngine on

# Redirect example.com to www.example.com
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

# Internally rewrite to "web" subdirectory.
RewriteRule (.*) web/$1 [L]

Я предполагаю, что у вас есть другой файл .htaccess в подкаталоге /web, который также использует mod_rewrite - в противном случае последняя директива приведет к циклу перезаписи.

после этого добавьте /en к URL, чтобы он выглядел как www.example.com/en

Вам нужно сделать это до того, как перезаписать URL в подкаталог web. Я предполагаю, что вы могли бы запросить www.example.com/<page>, и это должно перенаправить на www.example.com/en/<page>?

Попробуйте следующее:

RewriteEngine on

# Redirect example.com to www.example.com
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=302,L]

# Redirect to "/en" if not already present at the start of the URL
RewriteCond %{REQUEST_URI} !^/en/
RewriteRule (.*) http://%{HTTP_HOST}/en/$1 [R=302,L]

# Internally rewrite to "web" subdirectory.
RewriteRule (.*) web/$1 [L]

Директива RewriteCond проверяет, что URL-путь (!) не начинается с /en/ перед перенаправлением.

Примечание. Я изменил перенаправления на 302 (временно). Прежде чем использовать 301, сначала проверьте 302, чтобы избежать проблем с кэшированием в браузере. И обязательно проверяйте кеш браузера перед тестированием.

...