【问题标题】:mod_rewrite to keep subdomain in URLmod_rewrite 将子域保留在 URL 中
【发布时间】:2012-04-02 11:48:04
【问题描述】:

我有一个想要支持多语言的应用程序。 我认为最简单的方法是使用子域 aka

http://fr.domain.com/content

现在我在我的服务器上创建了子域,指向主根,确实,上面的 URL 是可访问的。
现在的问题是我的所有链接都是绝对的。
mod_rewrite 有没有办法从 URL 中捕获语言并将链接重写到相同的子域 URL?

因此,如果我们在 http://fr.domain.com/content 并单击链接 http://domain.com/link 我希望页面加载为 http://fr.domain.com/link

这可能吗? 干杯!

【问题讨论】:

    标签: mod-rewrite subdomain


    【解决方案1】:

    如果您想通过 apache 执行此操作,您可能必须检查 HTTP_REFERER。最好开始更新网站,以便将来链接是动态的...

    类似的东西(我目前无法真正测试):

    RewriteCond %{HTTP_REFERER} !^$
    RewriteCond %{HTTP_HOST} !^[a-z]{2}\.host\.com$ [NC]
    RewriteCond %{HTTP_REFERER} ^http://([a-z]{2})\.host.com/.*$ [NC]
    RewriteRule (.*) http://%1.host.com/$1 [R,L,QSA]
    

    编辑:在第三个条件中删除了一个 NOT

    您可能需要检查其他一些条件,但要进行测试以找出有效的方法。另外,如果您进行其他重定向,您需要一种方法来维护原始引荐来源网址。在某些方面,即使链接是这样的,通过 php(通过会话)或其他方式通过更动态的方式来实现这一点可能更容易。

    我正在使用这些:

    http://www.askapache.com/htaccess/mod_rewrite-variables-cheatsheet.html#HTTP_REFERER

    http://www.askapache.com/htaccess/modrewrite-tips-tricks.html

    【讨论】:

    • 我同意您可能希望更新网站以在链接发送到浏览器之前更改链接。如果您只处理 GET,上述解决方案将有效,但如果您有 POST 请求的绝对链接,则 mod_rewrite 不是解决此问题的合适工具。
    • 是的。也许它应该是“P”标志而不是“L”标志来保存发布数据。 (假设代理模块已启用)
    • 哦,我的.. 我完全忘记了我的问题。对不起,那个头骨是空的。我看到你只得到了一半的赏金。我很抱歉。您的解决方案效果很好。唯一要注意的是我希望将英语作为默认语言。我有一个带有href="it.domain.com" 等链接的语言切换。英文切换有一个正常的href="domain.com",当然,当我们在法语页面fr.domain.com 上时,引用者仍然保留法语子。有解决办法吗?
    • 如果到达页面时没有语言或无法告诉用户喜欢哪种语言,请选择默认语言。我不确定您的后端是什么样子.. 如果您没有动态语言,请将 en 子域和 no subdomain 都指向英语,如果这会弄乱您的 javascript,则不要将域转发到英语(如 301 )。如果您有动态语言,则选择提供哪种语言,如果您无法分辨,则默认使用英语。另外,我同意西米科。必须有一种方法来进行重写,并使它们与您正在使用的 CMS 一起工作。尝试并作为另一个问题提出。
    【解决方案2】:

    您可能需要某种即时 HTML 重写工具,例如 mod_proxy_html。该工具专门设计用于重写反向代理另一侧页面中的链接,但应该可以将其用于通用链接重写。具体来说,文档说:

    通常,mod_proxy_html 会在不在代理中或内容不是 HTML 时拒绝运行。这可以通过设置环境变量 PROXY_HTML_FORCE(例如使用 SetEnv 指令)来覆盖(风险自负)。

    该模块非常可配置,并支持条件重写和正则表达式,因此通过一些调整它应该可以满足您的需求。

    【讨论】:

      【解决方案3】:

      所以你是说你的网站有<a href="http://domain.com/link">之类的链接,而不仅仅是<a href="/link">???你的链接是这样编码的有什么原因吗?

      您是否愿意使用文本编辑器搜索/替换这些 href,而不是通过 URL 重写做一些非典型或过于复杂的事情?

      【讨论】:

      • 您使用的是什么 CMS?如果它是开源的,那么修改/修复 CMS 软件以编写正确的 URL 会更容易。
      猜你喜欢
      • 2012-01-27
      • 1970-01-01
      • 2014-04-19
      • 2012-01-22
      • 2016-06-05
      • 1970-01-01
      • 1970-01-01
      • 2012-02-04
      • 2010-11-20
      相关资源
      最近更新 更多