我面临Apache配置问题,可以总结如下。
myhostname.fr/sitename
等网址访问它们。
因此,在相应的.htaccess
中,通常的做法是在任何RewriteBase /sitename
+ RewriteCond
集之前设置RewriteRule
,并且工作正常。specialsite
子目录中),我必须创建一个专用域,因此网址看起来像domainname.myhostname.fr
。
然后,要使此网站正常运行,.htaccess
现在需要RewriteBase /
而不是RewriteBase /specialsite
,它也能正常运作。myhostname.fr/specialsite
访问此网站。所以我必须找到一种方法来有条件地使用上述RewriteBase
之一,具体取决于当前网址。
我尝试的第一种方式是这样工作:
<If "%(HTTP_HOST) =~ domainname\.myhostname\.fr">
RewriteBase /
</If>
<If "%(HTTP_HOST) =~ myhostname\.fr/specialsite">
RewriteBase /specialsite
</If>
但是我收到了HTTP 500错误,我花了很多时间才明白从Apache 2.4开始就可以使用<If>
指令,而我的主机只提供Apache 1.3!
所以(感谢其他一些SO答案)我想到了另一种方式,首先要做的是:
RewriteCond %{HTTP_HOST} domainname\.myhostname\.fr
RewriteRule ^ - [E=VirtualRewriteBase:/]
RewriteCond %{HTTP_HOST} myhostname\.fr/specialsite
RewriteRule ^ - [E=VirtualRewriteBase:/specialsite/]
然后将所有进一步的RewriteRule
替换为给定的VirtualRewriteBase
,如下所示:
RewriteRule ^ %{ENV:VirtualRewriteBase}index.php [L]
但是虽然它适用于域访问版本,但它为子目录访问版本提供了HTTP 404错误。
因此,为了观察更换的应用方式,我改变了上述规则:
RewriteRule ^ %{ENV:VirtualRewriteBase}index.php [R,L]
我发现重定向的网址看起来像这样:
http://myhostname.fr/kunden/homepages/7/d265580839/htdocs/specialsite/index.php
其中kunden/homepages/7/d265580839/htdocs/
是我托管的完整文档根。
您可以注意到文档根已经插入原始URL的两个部分之间
而且,无论我在/specialsite/
中代替VirtualRewriteBase
,结果都完全一样!
所以这是我的主要问题:为什么以及如何发生这种情况?
此外,我显然对可能的替代解决方案感兴趣,以实现双重访问可用性
但最重要的是我想了解......