RewriteRule ^en/?$ /index.php?lang=en [NC,L,R=301]
RewriteRule ^fr/?$ /index.php?lang=fr [NC,L,R=301]
RewriteRule ^de/?$ /index.php?lang=de [NC,L,R=301]
Для предотвращения внешнего перенаправления вам просто нужно убрать флаг R
.Это тогда становится внутренним переписыванием , и URL остается как example.com/fr
в адресной строке браузера.Например:
RewriteRule ^en/?$ /index.php?lang=en [NC,L]
Чтобы сделать это более кратким, когда количество языков ограничено, вы можете объединить эти три директивы в одну, используя alternation в регулярном выражении:
RewriteRule ^(en|fr|de)/?$ /index.php?lang=$1 [NC,L]
$1
- это обратная ссылка на захваченный идентификатор языка: "en", "fr" или "de".
Перед проверкой вам потребуется очистить кеш браузера, поскольку вероятны ошибочные 301быть кэшированным браузером.
RewriteRule ^/([^/]+)/? /index.php?lang=$1 [L,QSA,NC]
Это никогда не будет совпадать в контексте .htaccess
, просто из-за префикса косой черты в шаблоне RewriteRule
.Так что это ничего бы не сделало.(Возможно, вы видели кешированный ответ, если запрос все еще был перенаправлен?).Это должно читаться следующим образом:
RewriteRule ^([^/]+) /index.php?lang=$1 [L,QSA,NC]
Трейлинг /?
на паттерне лишний.Однако это соответствует любому сегменту пути.например.example.com/about
или example.com/foo/bar
и т. Д.