我的服务提供商只有一个虚拟主机可用,文件夹结构与此类似:
域
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