Возможно, вы реализуете двухэтапный подход:
, вы хотите перенаправить все текущие ссылки с помощью селектора языка, указанного в качестве аргумента запроса, на нужный шаблон URL.
вы хотите переписать все запросы к URL-адресам с помощью селектора языка, указанного в качестве первого маркера пути к внутреннему шаблону на основе аргумента запроса.
Сложная задача - не зашифровать любые другие потенциальные аргументы запроса ...
Вот пример для реализации двух названных вами языковых селекторов, упомянутых вами явно.Можно сделать это более общим для произвольных языков, но это повышает риск коллизий шаблонов, поэтому вам придется добавить условные выражения, которые снова повысят сложность.Вот почему я бы советовал против этого и предложил следующее:
RewriteEngine on
RewriteCond %{QUERY_STRING} ^((?:.*)&)?lang=(kr|en)(&(?:.*))?$
RewriteRule ^/?(.*)$ /%2/$1?%1%3 [R=301,QSD]
RewriteRule ^/?(?:kr|en)/(.*)/?$ /$1?lang=kr [END,QSA]
Рекомендуется сначала использовать перенаправление 302 и изменить его на перенаправление 301 только позже, когда вы уверены, что все работает какжелательно, чтобы предотвратить проблемы с кэшированием во время попыток.
В случае, если вы получили внутреннюю ошибку сервера (http статус 500), используя вышеприведенное правило, есть вероятность, что вы используете очень старую версию сервера apache http.В этом случае вы увидите определенный намек на неподдерживаемый флаг [END]
в файле журнала ошибок http-серверов.Вы можете попробовать обновить или использовать более старый флаг [L]
, он, вероятно, будет работать так же в этой ситуации, хотя это немного зависит от ваших настроек.
Это правило также будет работать в конфигурации хоста http-серверов или внутри файла динамической конфигурации (файл ".htaccess").Очевидно, что модуль перезаписи должен быть загружен внутри http-сервера и включен на хосте http.Если вы используете динамический файл конфигурации, вам нужно позаботиться о том, чтобы его интерпретация вообще была включена в конфигурации хоста и чтобы он находился в папке хоста DOCUMENT_ROOT
.
И общее замечание: вы всегда должны размещать такие правила в конфигурации хоста http-серверов, а не использовать файлы динамической конфигурации (".htaccess").Эти динамические конфигурационные файлы добавляют сложность, часто являются причиной неожиданного поведения, их трудно отладить, и они действительно замедляют работу http-сервера.Они предоставляются только в качестве последнего варианта для ситуаций, когда у вас нет доступа к реальной конфигурации хоста http-серверов (читай: действительно дешевые поставщики услуг) или для приложений, настаивающих на написании своих собственных правил (что является очевидным кошмаром безопасности).