Mod rewrite mod_重写以在URL中保留子域

Mod rewrite mod_重写以在URL中保留子域,mod-rewrite,subdomain,Mod Rewrite,Subdomain,我有这个应用程序,我想支持多种语言。 我认为最简单的方法是使用子域 http://fr.domain.com/content 现在,我在我的服务器上创建了子域,指向主根,实际上,上面的URL是可以访问的。 现在的问题是我所有的链接,这是绝对的。 mod_rewrite有没有办法从URL中捕获语言,然后将链接重写到同一子域URL 所以如果我们在http://fr.domain.com/content 然后单击链接http://domain.com/link 我希望页面加载为http://fr.d

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

http://fr.domain.com/content
现在,我在我的服务器上创建了子域,指向主根,实际上,上面的URL是可以访问的。 现在的问题是我所有的链接,这是绝对的。 mod_rewrite有没有办法从URL中捕获语言,然后将链接重写到同一子域URL

所以如果我们在http://fr.domain.com/content 然后单击链接http://domain.com/link 我希望页面加载为http://fr.domain.com/link

可能吗?
干杯

如果您想通过apache执行此操作,您可能必须检查HTTP\u 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]
编辑:删除了不在第三种情况下的

您可能需要检查一些其他条件,但要测试出哪些条件有效。另外,如果你做其他重定向,你需要一种方法来维持原来的推荐人。在某些方面,即使链接是这样的,也可以通过一种更动态的方式,通过php-through-session或其他方式来实现

我用的是:


您可能需要某种动态HTML重写工具,如。这个工具是专门为重写反向代理另一端页面中的链接而设计的,但是它应该可以用于一般的链接重写。具体来说,这些文件说:

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


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

那么您是说您的网站有这样的链接,而不仅仅是???你的链接是这样编码的,有什么原因吗


你是否愿意用一个文本编辑器来搜索/替换这些HREF,而不是做一些典型的或过于复杂的URL重写工作?

我同意,你可能想在链接发送到浏览器之前更新网站以更改链接。如果您只处理GET,上面的解决方案就可以了,但是如果您有POST请求的绝对链接,mod_rewrite不是解决这个问题的合适工具。True。也许应该是P标志而不是L标志来保存post数据。假设代理模块已启用doh,则my。。我完全忘记了我的问题。对不起,头颅是空的。我知道你只得到了一半的赏金。。我道歉。您的解决方案非常有效。唯一的问题是我想把英语作为默认语言。我有一个带有诸如href=it.domain.com等链接的语言开关。英语开关有一个普通的href=domain.com,当然,当我们在法语页面fr.domain.com上时,referer仍然保留法语sub。有没有解决方案?如果访问该页面时没有任何语言或方式来告诉用户喜欢哪种语言,选择默认语言。我不确定你的后端是什么样子。。如果您没有动态语言,请将en subdomain和no subdomain都指向英语,如果这会影响您的javascript,请将no domain像301一样转发到英语。如果你有一种动态语言,那么选择哪种语言是给定的,如果你说不出来,默认为英语。此外,我同意西米科的观点。必须有一种方法来进行重写,并使它们与您正在使用的CMS一起工作。试着问另一个问题。你用的是什么CMS?如果它是开源的,那么修改/修复CMS软件以编写正确的URL会更容易。