重写HOST而不redirect到重写的主机名,这可能吗?

我的服务提供商只有一个虚拟主机可用,文件夹结构与此类似:

    • primarydomain.ext

      • 统计
      • 万维网
      • 次要(< – 这是“secondary.primarydomain.ext”的文件夹)

我有域“primarydomain.ext”注册和工作。 我有另一个域名“secondary.ext”,并指向同一个Web服务器。 服务提供商允许这个,现在它像primarydomain.ext的别名一样。 我想使用mod_rewrite在内部重写“secondary.ext”到“secondary.primarydomain.ext”并像那样处理它(以名为secondary的文件夹作为根目录)。

浏览器中的url应该保持“secondary.ext”! 我使用的解决scheme是将以下内容存储在位于“primarydomain.ext”文件夹内的.htaccess文件中,但将浏览器URL更新为“secondary.primarydomain.ext”:

RewriteEngine On RewriteCond %{HTTP_HOST} secondary.ext$ [NC] RewriteRule ^(.*)$ http://secondary.primarydomain.ext [L] 

我怎样才能解决这个问题,使浏览器的URL不更新,或其他解决scheme给我所需的效果?

(注意:我的提供者不能(不想)为未注册的域创build一个新的虚拟主机,所以他们指出我这个解决scheme,但不提供对它的支持。)

答案是不尝试和改变HOST,而是改变本地查找文件的path。

 RewriteCond %{HTTP_HOST} secondary.ext$ [NC] RewriteRule ^(.*)$ /domains/primarydomain.ext/secondary$1 [L] 

编辑如果得到无限循环,则添加另一个条件来排除已在辅助文件夹中的HTTP_HOST条件之后和规则之前的请求 :

 RewriteCond %{REQUEST_URI} !^/secondary/.* 

更改主机将始终使Apache创build一个外部redirect。

绝对url
如果指定了绝对URL,则mod_rewrite会检查主机名是否与当前主机匹配。 如果是这样,scheme和主机名被剥离出来,结果path被视为URLpath。 否则,将为给定的URL执行外部redirect。 要强制外部redirect返回到当前主机,请参阅下面的[R]标志。

请参阅http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewriterule