【问题标题】:Rewriting URLs with mod_rewrite for languages使用 mod_rewrite 重写语言的 URL
【发布时间】:2011-05-06 18:33:56
【问题描述】:

我需要使用 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

这就是我希望使用 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

有人可以帮帮我吗? :-)

谢谢,
罗伯特

【问题讨论】:

    标签: mod-rewrite url-rewriting apache2


    【解决方案1】:
    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/”开头 (^),则有一系列小写字母 (+ 表示“一个或多个”,[a-z] 的意思是“[a, b, ..., y, z] 中的一个字母”),这是我的第一组(有括号 -> 它是一组)。然后是“?locale=”,然后是“en”或(|表示“或”)“de”,这是我的第二组,然后是一个下划线(“_”)和两个大写字母,后面什么都没有($ 表示是 URL 的结尾)”。 我写了一个空格和我想要的新 URL,我使用 $n 来使用第 n 组。 第二个网址是“漂亮的”,第一个是真实的。

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

    编辑:

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

    【讨论】:

    • 这是迄今为止我得到的最好和最容易理解的答案之一。没有开放的问题,写得很清楚,完美。谢谢! :-)
    猜你喜欢
    • 1970-01-01
    • 2011-11-10
    • 1970-01-01
    • 2012-03-31
    • 2016-12-14
    • 1970-01-01
    • 2011-04-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多