Перезапись URL с помощью mod_rewrite для языков - PullRequest
1 голос
/ 06 мая 2011

Мне нужно переписать URL для моего сайта, используя mod_rewrite, но я не могу понять регулярные выражения.

Вот как могут выглядеть текущие URL:
http://mydomain.com/zenphoto/pages/xyz?locale=en_US
http://mydomain.com/zenphoto/pages/xyz?locale=de_DE

http://mydomain.com/zenphoto/gallery_1?locale=de_DE
http://mydomain.com/zenphoto/gallery_n?locale=de_DE

xyz может содержать разные строки, например legal, about и т. Д.

И этокак бы я хотел, чтобы использовались URL:
http://mydomain.com/zenphoto/de/pages/xyz
http://mydomain.com/zenphoto/en/pages/xyz

http://mydomain.com/zenphoto/de/gallery_1
http://mydomain.com/zenphoto/en/gallery_n

Я должен отметить, что только de и en должны быть возможны.Любые другие строки должны быть перенаправлены на de.

Может кто-нибудь помочь мне, пожалуйста?: -)

Спасибо,
Роберт

1 Ответ

3 голосов
/ 06 мая 2011
RewriteEngine on
RewriteRule ^zenphoto/pages/([a-z]+)\?locale=(en|de)_[A-Z]{2}$ /zenphoto/$2/pages/$1
RewriteRule ^zenphoto/gallery_([0-9])\?locale=(en|de)_[A-Z]{2}$ /zenphoto/$2/gallery_$1

В первом примере я говорю: «Если URL начинается ( ^ ) с« zenphoto / pages / », то иметь последовательность строчных букв ( + означает« один » или более ", а [az] означает" буква в [a, b, ..., y, z] "), что является моей первой группой (есть скобки -> это группа) Затем следует "? Locale =", затем "en" или ( | означает "или") "de", и это моя вторая группа, затем следует подчеркивание ("_ ") и две заглавные буквы, и после них ничего не стоит ( $ означает, что это конец URL)". Я пишу пробел и новый URL, который хочу, и использую $ n для использования n -ой группы. Второй URL-адрес - «красивый», а первый - настоящий.

Вы должны использовать обратную косую черту перед специальными символами, такими как?, +, {,}, (,), [,], *,., | если вы хотите использовать один в своем URL.

Edit:

Если вы хотите избежать бесконечных циклов, вы должны добавить флаг [L] (L = Last) в конце каждой строки.

...