【问题标题】:How to rewrite URL based on domain in apache and add extra parameter?如何在apache中基于域重写URL并添加额外的参数?
【发布时间】:2009-07-27 08:44:56
【问题描述】:

基本上,我想做的是重写所有 url,因为我们有许多不同的语言。我们有一个托管多个域的服务器。我们有 www.example.com、www.example.fr、www.example.de、www.anotherdomain.com、www.anotherdomain.de。我想要做的是使用额外的 url 参数 lang=en 将所有请求从 example.xxx 重定向到 www.example.com。这不应影响其他域,例如 www.anotherexample.com 等。

这不起作用:

RewriteCond %{HTTP_HOST} ^([^.]+)\.example\.de$
RewriteRule ^(.*)$   http://www.example.com/$1?lang=de [PT]
RewriteCond %{HTTP_HOST} ^([^.]+)\.example\.fr$
RewriteRule ^(.*)$   http://www.example.com/$1?lang=fr [PT]

更困难的是,ServerName 与主机名完全不同,它被称为 prod.migr.com。

任何建议将不胜感激。

【问题讨论】:

    标签: apache mod-rewrite


    【解决方案1】:

    试试这个:

    RewriteCond %{HTTP_HOST} ^([^.]+)\.example\.de$
    RewriteRule ^  http://www.example.com%{REQUEST_URI}?lang=de [L,R=301,QSA]
    RewriteCond %{HTTP_HOST} ^([^.]+)\.example\.fr$
    RewriteRule ^  http://www.example.com%{REQUEST_URI}?lang=fr [L,R=301,QSA]
    

    【讨论】:

      【解决方案2】:

      PT 标志很可能是您的问题。我从未见过当目标是完整的域地址时使用它,因为它意味着 URI 可以通过 mod_alias 进一步重定向。

      您应该使用的标志是 QSA 标志,以防用户正在访问的页面上有查询字符串。

      RewriteCond %{HTTP_HOST} ^([^.]+)\.example\.de$
      RewriteRule ^(.*)$   http://www.example.com/$1?lang=de [QSA]
      RewriteCond %{HTTP_HOST} ^([^.]+)\.example\.fr$
      RewriteRule ^(.*)$   http://www.example.com/$1?lang=fr [QSA]
      

      但是,如果所有语言都托管在这样的同一台服务器上,更好的解决方案是使用您的服务器端语言(例如 php 或 asp)检查用户正在访问的主机。

      针对其他信息进行编辑:

      你不能通过像这样重写到不同的域来获取 POST 变量,因为它必须重定向请求。

      最好的办法是确定服务器端语言中的语言,而不是使用 mod_rewrite。

      如果你用php会是这样的

      $lang = substr(strrchr($_SERVER['HTTP_HOST'], '.'), 1);
      

      其他语言也有类似的方法来确定宿主。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-04-14
        • 1970-01-01
        • 2010-11-30
        • 1970-01-01
        • 2010-09-08
        • 2017-08-14
        • 1970-01-01
        • 2012-10-29
        相关资源
        最近更新 更多