mod_rewrite将子域保留在URL中

时间:2012-04-02 11:48:05

标签: mod-rewrite subdomain

我有这个应用程序,我想支持多种语言。 我认为最简单的方法是使用子域名

http://fr.domain.com/content

现在我在服务器上创建了子域,指向主根,实际上,上面的URL是可访问的 现在的问题是我所有的链接,这是绝对的 mod_rewrite是否有办法从URL中捕获语言,而不是重写指向同一子域URL的链接?

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

这可能吗? 干杯!

3 个答案:

答案 0 :(得分:5)

如果您想通过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]

编辑:删除了第3个条件中的NOT

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

我正在使用这些:

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

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

答案 1 :(得分:2)

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

  

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

该模块非常易于配置,并且支持条件重写和正则表达式,所以通过一些调整,它可以做你想要的。

答案 2 :(得分:2)

所以你说你的网站有像<a href="http://domain.com/link">这样的链接,而不仅仅是<a href="/link"> ???您的链接是否有某种原因可以编码?

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