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