在mod_rewrite中掩盖url

有没有办法做一个mod_rewrite从一个域到另一个,但始终保持相同的浏览器URL? 这就是我要的:

用户input诸如bacon.com之类的内容,并以example.com/bacon结尾,但浏览器URL始终保留为bacon.com?

我基本上想要做一个mod_rewrite,同时掩盖的URL。 对不起,没有想像力的示例域,但它仍然只有上午10点…我检查了很多其他的答案,但他们通常涉及mod_rewrites在同一个域。 他们没有处理这个事实,bacon.com已经是example.com的ServerAlias。

我可以给你三种这样做的方法。

1使用虚拟主机

鉴于bacon.com是一个ServerAlias example.com,即他们都在同一台服务器上,你可以做到这一点,根本不使用任何mod_rewrite。 想想这样:mod_rewrite是将URL映射到文件系统的最基本的方法。 所以我要做的就是简单地设置一个单独的使用正确目录作为其基础的VirtualHost。

这里有一个简单的例子:

NameVirtualHost *:80 <VirtualHost *:80> ServerName example.com DocumentRoot /www/files [... all other config you have for example.com] </VirtualHost> <VirtualHost *:80> ServerName bacon.com DocumentRoot /www/files/bacon # To have CSS directly under /www/files/css instead of /www/files/bacon/css Alias /css /www/files/css [... all other config you have for bacon.com] </VirtualHost> 

如你所见,这不是重写; 而是将bacon.com设置为使用example.com/bacon的基本目录作为自己的DocumentRoot。

2使用mod_rewrite作为代理

如果你想使用mod_rewrite,你可以使用P标志,这将使mod_rewrite作为代理。 这是一个例子:

 RewriteRule /(.*) http://example.com/bacon/$1 [P] 

编辑回答评论:

由于您希望http://bacon.com/css是http://example.com/css而不是http://example.com/bacon/css ,因此您需要制定一个单独的规则,首先抓取该特定的url:

 RewriteRule /css/(.*) http://example.com/css/$1 [P] RewriteRule /(.*) http://example.com/bacon/$1 [P] 

为了做到这一点,你需要加载和启用mod_proxy。 不过请注意,与直接使用mod_proxy相比,这会降低性能,因为它不处理持久连接或连接池。 所以如果你不能用VirtualHosts来做你想要的,我会build议第三种方法:

3直接使用mod_proxy

 <VirtualHost *:80> ServerName bacon.com ProxyPass http://example.com/bacon ProxyPassReverse http://example.com/bacon </VirtualHost> 

有关更多信息,请参阅mod_proxy文档