【问题标题】:Apache proxypass and multilingual domainsApache proxypass 和多语言域
【发布时间】:2015-01-19 13:35:39
【问题描述】:

我在 domain.com 上有一个网站,其 URL 中包含多语言内容,例如:

  • domain.com/en 英文版
  • domain.com/de 用于德语
  • domain.com/it 用于意大利语

等等。这些不是真正的目录 - 这些只是重写为 /index.php?lang=... 所以 domain.com/lang/one/two/three 被重写为 /index.php?lang=$1&path=$2

它还有 domain.com/assets 目录,其中包含所有常见文件(css、图像等)

现在我想改变每种语言都有自己的域,我认为可以通过在 Apache 中使用 mod_proxy、mod_proxy_http 和 mod_proxy_html 来管理它。我想要实现的是,如果用户访问:

  • www.domain.com 他从 domain.com/en 获取内容
  • www.domain.de 他从 domain.com/de 获取内容
  • www.domain.it 他从 domain.com/it 获取内容

如果他从任何域(.com、.de、.it)访问 /assets 目录,他将从 domain.com/assets 获取内容。此外,如果用户访问 URL,例如www.domain.de/something 他应该从 www.domain.com/de/something 接收内容

另一件事是在输出之前必须重写的 URL,例如浏览 domain.de 的用户根本不会去 domain.com...

这可能吗?否则,我们将不得不对整个 CMS 进行重新编程,以便为每种语言使用不同的域...

【问题讨论】:

    标签: apache mod-rewrite reverse-proxy mod-proxy mod-proxy-html


    【解决方案1】:

    这是可能的。只需在单个虚拟主机中处理它们并使用 RewriteCond 检查 %{HTTP_HOST} 并执行您今天已经在执行的相同重写。您可以使用 %1 捕获国家代码并反向引用它。

    【讨论】:

    • 问题在于 CMS 生成所有内部链接(包括 css 和 js),其中包含完整的 www.domain.com/lang/..... URL。如果我们希望 CMS 生成 www.domain.lang URL,我们将不得不重写整个 CMS。这就是为什么我正在寻找一种解决方案,该解决方案还可以将 HTML 文档中的所有 URL 更改为正确的域,并且从我通过互联网阅读的内容 apache 的 mod_proxy_html 可以做到这一点 - 但我无法配置它,无论我尝试什么都不起作用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-30
    • 1970-01-01
    • 2015-09-01
    • 2011-12-10
    • 1970-01-01
    • 2020-03-30
    • 2013-11-26
    相关资源
    最近更新 更多