【问题标题】:Multilanguage site, subdirectories as language (RewriteRule)多语言站点,子目录作为语言 (RewriteRule)
【发布时间】:2010-08-10 15:01:42
【问题描述】:

对于我的网站,我想将我的网址重写为:

www.xxx.com/en/index.php 而不是 www.xxx.com/index.php?language=en
www.xxx.com/nl/index.php 而不是 www.xxx.com/index.php?language=nl

www.xxx.com 应该是 www.xxx.com/en/

这确实有效,我添加了这些重写规则

RewriteCond %{HTTP_HOST}%{REQUEST_URI} ^www\.xxx\.com(\/?)$
RewriteRule (.*) http://www.xxx.com/en/$1 [R=302,L]

RewriteRule ^(nl|en)/(.*)$ $2?language=$1&%{QUERY_STRING} [L]

添加 R=302 用于测试目的

上面给出的 RewriteCond 和 RewriteRule 是否足够好,或者还有其他可能更短或更好的方法来将 .com/ 重写为 .com/en/

如果 url 被编辑为不存在的语言,我希望此用户被重定向到英语。

示例
请求 www.xxx.com/es/index.php,该语言不存在或没有给出语言我希望用户被重定向到 www.xxx.com/en/index.php

我尝试了以下方法:

RewriteRule ^([^n][^l]|[^e][^n])/(.*)$ en/$2%{QUERY_STRING} [L,R=302]

这在某些情况下有效,但如果输入 www.xxx.com/ne/index.php,它被认为是有效的并且不会被重写。 www.xxx.com/index.php 也不会重写为 www.xxx.com/en/index.php

有人可以帮我解决这个问题吗?

提前致谢!

【问题讨论】:

    标签: .htaccess mod-rewrite


    【解决方案1】:

    试试这个规则:

    RewriteCond $1 !^(en|nl)$
    RewriteRule ^([a-z]{2})/(.*)$ en/$2 [L,R=302]
    

    【讨论】:

    • 似乎有效,谢谢!很多。但是,如果出于某种原因选择 www.xxx.com/befr/,则重写失败,因为 /befr/ 超过 2 个字符。是否也可以解决这个问题?我尝试更改您的代码: RewriteRule ^([a-z]*?)/(.*)$ en/$2 [L,R=302] 但这会导致所有图像都是不可见的,因为它们位于一个目录(图像)中也被我的调整改写了
    • @PimPee:那么限制在哪里?如果不是以/en/…/nl/… 开头的每个请求都应该重定向到/en/…
    • 我正在考虑不在我的例外列表中的所有内容,在这种情况下应该包含大约 15 个文件夹。也许这确实是一个奇怪的解决方案,因为如果有人按照设计的方式使用该网站,则不应该发生这种情况。
    猜你喜欢
    • 1970-01-01
    • 2013-11-03
    • 2016-02-16
    • 2015-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-11
    相关资源
    最近更新 更多