我的htaccess文件存在一些问题。我正在尝试使用重写规则在我的apache共享托管服务器上创建伪样式虚拟主机。
我在一个帐户下有3个域名,我希望实现以下目标:
我目前的文件如下:
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^domain2.co.uk$ [OR]
RewriteCond %{HTTP_HOST} ^www.domain2.co.uk$ [OR]
RewriteRule ^(.*)$ /d2/$1
RewriteCond %{HTTP_HOST} ^domain3.co.uk$ [OR]
RewriteCond %{HTTP_HOST} ^www.domain3.co.uk$ [OR]
RewriteRule ^(.*)$ /d3/$1
这最初看起来像它正在工作,除了所有域似乎进入第一个规则并指向/ d2。结果是,如果输入domain1.co.uk,domain2.co.uk或domain3.co.uk,那么他们都会转到domain1.co.uk。
有什么想法吗?
答案 0 :(得分:1)
你在每个第二条规则上加上[OR]。如果此失败,它会指示Apache查看下一个规则。当两个规则都失败时,它会转到下一个规则,这是不存在的。所以你的RewriteRule在任何情况下都会被触发。这相当于做IF something OR somethingElse OR
,这是荒谬的。
从第二条规则中删除[OR],它应该有效。
答案 1 :(得分:0)
我会在规则1中明确使用第一个域名,您需要告诉第一个规则忽略其他2个域名。 [OR]
也无需检查www
。你可以做出一个条件。
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} !^(www\.)?domain(2|3)\.co\.uk$
RewriteRule ^(.*)$ http://www.domain1.co.uk/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^(www\.)?domain2\.co\.uk$
RewriteRule ^(.*)$ /d2/$1 [L]
RewriteCond %{HTTP_HOST} ^(www\.)?domain3\.co\.uk$
RewriteRule ^(.*)$ /d3/$1 [L]