Mod rewrite 使用mod_rewrite for languages重写URL

Mod rewrite 使用mod_rewrite for languages重写URL,mod-rewrite,url-rewriting,apache2,Mod Rewrite,Url Rewriting,Apache2,我需要使用mod_rewrite对我的网站进行一些URL重写,但我无法理解正则表达式 以下是当前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

我需要使用mod_rewrite对我的网站进行一些URL重写,但我无法理解正则表达式

以下是当前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

谁能帮帮我吗?:-)

谢谢,
罗伯特

对于第一个例子,我说:“如果URL以“zenphoto/pages/”开头(^),然后有一系列小写字母(+表示“一个或多个,”,而[a-z]表示“a,b,…,y,z]中的一个字母”),这是我的第一个组(有括号->这是一个组)。然后是“?locale=”,然后是“en”或(|表示“或”)“de”,这是我的第二个组,它后面跟着一个下划线(“389;”)和两个大写字母,($表示它是URL的结尾)。 我写了一个空格和我想要的新URL,我使用$n来使用第n个组。 第二个URL是“漂亮的”,第一个是真实的

如果要在URL中使用反斜杠,则必须在特殊字符之前使用反斜杠,如?、+、{、}、(、)、[、]、*、|

编辑:


如果你想避免无限循环,你应该在每一行的末尾加上标志[L](L=Last)。

这是迄今为止我得到的最好、最容易理解的答案之一。没有开放性问题,写得很清楚,很完美。谢谢!:-)
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