Рейтинг:0

RewriteRule на основе языка, например mysite.com/en/ в .htaccess

флаг us

Я пытаюсь написать директивы перенаправления в .htaccess для внутренней пересылки всех пользовательских запросов следующим образом:

  • Каждый запрос в языковой папке должен перенаправляться на запрошенный файл со строкой языкового запроса:
example.com/en/contact.php -> example.com/contact.php?lang=en
  • Перенаправьте любой запрос без языкового пути в языковую папку по умолчанию следующим образом:
example.com -> example.com/en
  • Удалите косую черту, если адрес вводится с ней:
с example.com/en/ на example.com/en
  • Для проектов папок каждый запрос должен вести к файлу view-project.php с соответствующими строками запроса:
example.com/en/projects/test -> example.com/view-project.php?lang=en&path=test

Вот моя попытка, но она не работает без косой черты в запросе, например: http://www.example.com/ru и не перенаправляет http://www.example.com в языковую папку по умолчанию.

RewriteEngine включен

RewriteRule ^(en|de)/(.*)$ $2?lang=$1 [L,QSA,NC]

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^projects/([^/\.]+)/?$ view-project.php?path=$1 [QSA,L]

Как я могу этого добиться?

Это возможно дубликат, и я извиняюсь за это. Я искал везде и прочитал около 100 сообщений, но я не нашел то, что ищу.

vidarlo avatar
флаг ar
Так что example.com/de/ работает, но не example.com/de? Просто чтобы было абсолютно ясно.
denoise avatar
флаг us
@видарло точно
флаг kz
Чтобы уточнить, языковая «папка» не является физическим каталогом? «Каждый запрос в языковой папке» — это буквально каждый запрос (согласно вашей директиве) или просто файлы `.php`, которые существуют по следующему URL-адресу? Как насчет статических ресурсов (CSS, JS, изображений и т. д.)? Они также находятся в языковой «папке»? Или их надо исключить? «Перенаправить любой запрос без языкового пути» - буквально «любой запрос»? Без исключений? Как насчет статических ресурсов?
флаг kz
«Добавить завершающую косую черту» - только после «папки языка» (согласно вашему примеру), или это должно быть более общим (хотя из других ваших примеров я не думаю, что это может быть более общим). Должны ли запросы для `/en/` быть переписаны в `index.php`? В вашем примере вы переписываете это буквально `?lang=XX` (что не является строго допустимой конечной точкой), для этого требуется, чтобы mod_dir выдал подзапрос для `DirectoryIndex` (который здесь явно не задан, поэтому не гарантируется для работы с кодом, как опубликовано).

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.