Использование обратной ссылки в начале шаблона в правиле перезаписи apache

0

В настоящее время я переводю сайт с английского на испанский. Я хочу использовать правило перезаписи, которое может поместить текущий язык в начало 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

Теги:
mod-rewrite
url-rewriting
rewrite

2 ответа

0

Благодаря знаниям бобдэ, я понял, что мне нужно полностью удалить это состояние и настроить RewriteRule таким образом:

RewriteRule ^/subdirectory/spanish/(.*)$ /subdirectory/$1?language=spanish

Примечание: /subdirectory - это папка внутри виртуального сервера (localhost), которую я запускаю на своем ноутбуке.

Как вы можете видеть, мне пришлось поместить каталог /spanish/в шаблон, и какой-то подкаталог был под тем, который я использовал бы в качестве обратной ссылки на фактическую ссылку, тогда я бы просто добавил язык переменной GET = испанский до конца связь. Мне все равно нужно протестировать, чтобы убедиться, что это работает для любого количества подзаголовков под /spanish/, но это определенно решило мою проблему.

0

Основываясь на приведенном выше примере, следующее должно делать то, что вы хотите:

RewriteCond %{QUERY_STRING} ^language=spanish$
RewriteRule ^/(.*)$ /spanish/%1?

RewriteCond заставляет RewriteRule запускаться только тогда, когда строка запроса "язык = испанский".

RewriteRule сохраняет каталог с исходного URL и добавляет его в каталог "/испанский/". ? в конце удаляет строку запроса.

  • 0
    Спасибо за помощь. К сожалению, этот код не получил результат, который я искал. Однако объяснение, которое вы дали мне относительно условия перезаписи и способа настройки фактического правила перезаписи, позволило мне увидеть, что я должен был сделать. Мне пришлось полностью удалить RewriteCond, удалить / spanish с правой стороны и добавить его в шаблон, а оттуда просто добавить переменную GET.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню