hoh*_*ner 6 mod-rewrite apache-2.2
有没有办法从一个域到另一个域进行 mod_rewrite,但始终保持浏览器 URL 相同?这就是我要的:
用户输入bacon.com 之类的内容并最终访问example.com/bacon,但浏览器 URL 始终保持为 bacon.com?
我基本上想在屏蔽 URL 的同时进行 mod_rewrite。对于缺乏想象力的示例域,抱歉,但现在仍然只有上午 10 点……我已经检查了很多其他答案,但它们通常总是涉及同一个域上的 mod_rewrites 。他们没有处理 bacon.com 已经是 example.com 的 ServerAlias 的事实。
Jen*_*y D 10
我可以给你三种方法来做到这一点。
鉴于 bacon.com 是 example.com 的 ServerAlias,即它们都在同一台服务器上,您可以在不使用任何 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>
Run Code Online (Sandbox Code Playgroud)
如您所见,这不是重写;相反,您将 bacon.com 设置为使用 example.com/bacon 的基本目录作为它自己的 DocumentRoot。
如果您确实想改用 mod_rewrite,则可以让它使用 P 标志,这将使 mod_rewrite 充当代理。下面是一个例子:
RewriteRule /(.*) http://example.com/bacon/$1 [P]
Run Code Online (Sandbox Code Playgroud)
由于您希望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]
Run Code Online (Sandbox Code Playgroud)
为此,您需要加载并启用 mod_proxy。但是请注意,与直接使用 mod_proxy 相比,这会降低性能,因为它不处理持久连接或连接池。因此,如果您无法使用 VirtualHosts 做您想做的事,我建议您使用第三种方法:
<VirtualHost *:80>
ServerName bacon.com
ProxyPass http://example.com/bacon
ProxyPassReverse http://example.com/bacon
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅mod_proxy 文档
归档时间: |
|
查看次数: |
20830 次 |
最近记录: |