使用mod_rewrite为语言重写URL

时间:2011-05-06 18:33:56

标签: mod-rewrite url-rewriting apache2

我需要使用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可能包含不同的字符串,例如legalabout

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

我应该提到只有deen才有可能。任何其他字符串都应重新路由到de

有人可以帮我吗? : - )

谢谢,
罗伯特

1 个答案:

答案 0 :(得分: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 / pages /“开始( ^ ),则会有一系列小写字母( + 表示“一个或多个”,而 [az] 表示“[a,b,...,y,z]中的字母”,这是我的第一组(有括号 - >它是一个组。)然后是“?locale =”,然后是“en”或( | 表示“或”)“de”,这是我的第二组,然后是一个下划线(“_”)和两个大写字母,后面没有任何内容( $ 表示它是URL的结尾)“。 我写了一个空格和我想要的新网址,并使用 $ n 来使用 n -th组。 第二个URL是'漂亮的',第一个是真实的。

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

编辑:

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

相关问题