В настоящее время я переводю сайт с английского на испанский. Я хочу использовать правило перезаписи, которое может поместить текущий язык в начало URL-адреса сразу после домена. Пример:
текущий url без правил перезаписи: http://www.example.com/sample_subdirectory/?language=spanish
цель: http://www.example.com/spanish/sample_subdirectory/
На момент написания этой статьи у меня есть все мои php файлы, которые были переписаны так, как если бы они были подкаталогами (например, example.com/something.php на example.com/something/), поэтому проблем там нет. Моя цель состоит в том, чтобы увидеть, есть ли способ переписать URL-адрес, чтобы вместо отображения переменной языка GET отображалось "/spanish/something/something_else/etc/"; Цель состоит в том, чтобы не делать индивидуальное правило перезаписи для каждого URL-адреса только для испанских переводов, а скорее добавлять этот/испанский/подкаталог к началу URL-адреса. Я попытался понять, как использовать метасимволы, но я не думаю, что делаю это правильно. Вот что я пробовал (я уверен, что это сделано неправильно:/)
RewriteCond% {QUERY_STRING} ^ id = (испанский) $ RewriteRule ^/spanish/(.*)$/$ 1? Id =% 1
Я все еще новичок в переписывании правил, я знаю только основные вещи, я определенно не администратор веб-сервера, поэтому я не знаю, как реализовать то, что я собираюсь сделать. Надеюсь, это возможно. По иронии судьбы, я мог бы, вероятно, закончить типизацию простых правил перезаписи, вместо того, чтобы потратить час, пытаясь сделать это, но хорошо: P
Благодаря знаниям бобдэ, я понял, что мне нужно полностью удалить это состояние и настроить RewriteRule таким образом:
RewriteRule ^/subdirectory/spanish/(.*)$ /subdirectory/$1?language=spanish
Примечание: /subdirectory - это папка внутри виртуального сервера (localhost), которую я запускаю на своем ноутбуке.
Как вы можете видеть, мне пришлось поместить каталог /spanish/в шаблон, и какой-то подкаталог был под тем, который я использовал бы в качестве обратной ссылки на фактическую ссылку, тогда я бы просто добавил язык переменной GET = испанский до конца связь. Мне все равно нужно протестировать, чтобы убедиться, что это работает для любого количества подзаголовков под /spanish/, но это определенно решило мою проблему.
Основываясь на приведенном выше примере, следующее должно делать то, что вы хотите:
RewriteCond %{QUERY_STRING} ^language=spanish$
RewriteRule ^/(.*)$ /spanish/%1?
RewriteCond заставляет RewriteRule запускаться только тогда, когда строка запроса "язык = испанский".
RewriteRule сохраняет каталог с исходного URL и добавляет его в каталог "/испанский/". ? в конце удаляет строку запроса.