htaccess问题配置伪样式虚拟主机

时间:2015-03-20 19:38:06

标签: apache .htaccess mod-rewrite

我的htaccess文件存在一些问题。我正在尝试使用重写规则在我的apache共享托管服务器上创建伪样式虚拟主机。

我在一个帐户下有3个域名,我希望实现以下目标:

  • 如果不存在规则,则转到root(domain1.co.uk)
  • 如果domain2.co.uk将目录设置为d1
  • 如果domain3.co.uk将目录设置为d2
  • 无论域名如何,如果www。缺少,添加它。

我目前的文件如下:

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。

有什么想法吗?

2 个答案:

答案 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]