2011-05-06 73 views
1

我需要一些网址使用mod_rewrite重写我的网站,但我想不通的正则表达式。与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可能包含不同的字符串,例如legalabout

这就是我想使用的网址:
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

我应该指出,只有deen应成为可能。其他任何字符串应重新路由到de

有人可以帮我吗? :-)

感谢,
罗伯特

回答

3
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提供/页/”,然后有小写的序列字母(+表示 “一个或多个” 和[AZ]单元 “[A,b,...,Y,Z]一个字母”),这是我的第一组(有括号 - >这是一组),那么它的后面,然后通过“en”或(。“区域设置=?” |手段“或”)“德”,这是我的第二个组,那么它的后面是下划线(“_”)和两个大写字母,并没有什么后($意味着它是URL的结束)”。 我写了一个空间,而新的URL我想,我用$ N使用ñ个组。 第二个URL是'漂亮的',第一个是真实的。

你面前特殊字符喜欢用反斜杠,+,{},(,),[,],*,?。|如果你想在你的网址中使用一个。

编辑:

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

+0

这是迄今为止我得到的最好和最易理解的答案之一。没有开放的问题,写得很清楚,完美。谢谢! :-) – 2011-05-06 19:57:16