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

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

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

    • 主要域扩展名

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

我已经注册了域“primarydomain.ext”并可以使用。我在其他地方注册了第二个域“secondary.ext”,并指向同一个 Web 服务器。服务提供商允许这样做,现在它充当 primarydomain.ext 的别名。我想使用 mod_rewrite 在内部将“secondary.ext”重写为“secondary.primarydomain.ext”,并以此方式处理它(以名为 secondary 的文件夹作为根目录)。

浏览器中的 URL 应保持为“secondary.ext”!我的解决方案有效,它将以下内容存储在位于“primarydomain.ext”文件夹内的 .htaccess 文件中,但将浏览器 URL 更新为“secondary.primarydomain.ext”:

RewriteEngine On 

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

我该如何修复此问题,以便浏览器 URL 不会更新,或者其他任何解决方案都能给我带来预期的效果?

(请注意:我的提供商无法(不想)为未由他们注册的域名创建新的虚拟主机,因此他们向我指出了这个解决方案,但不提供对它的支持。)

答案1

答案是不要尝试更改 HOST,而是更改用于在本地查找文件的路径。

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

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

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

答案2

更改主机总是会导致 Apache 创建外部重定向。

绝对 URL
如果指定了绝对 URL,mod_rewrite 会检查主机名是否与当前主机匹配。如果匹配,则会删除方案和主机名,并将结果路径视为 URL 路径。否则,将对给定的 URL 执行外部重定向。要强制将外部重定向回当前主机,请参阅下面的 [R] 标志。

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

相关内容