2012-07-18 188 views
0

我试图用我当前的共享主机配置修复一些烦恼,但是我有一些问题会根据需要设置一切。.htaccess将根重定向到子域

目前,我有以下文件夹结构:

/ 
/.htaccess 
    /example 
    /example1 
    /example2 
    /example3 

在共享主机,主域被自动设置为指向根目录。在努力指向主域的子域,添加以下到我的根文件的.htaccess:

RewriteEngine on 
RewriteCond %{HTTP_HOST} ^example\.com$ [NC] 
RewriteRule ^(.*)$ http://www.example.com/$1 [L] 

RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$ 
RewriteCond %{REQUEST_URI} !^/example/ 
#RewriteCond %{REQUEST_FILENAME} !-f 
#RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /example/$1 
RewriteCond %{HTTP_HOST} ^(www.)?example.com$ 
RewriteRule ^(/)?$ example/ [L] 

这正确重写URL,以便将example.com显示从/例子内容/子目录。问题是根目录的子目录没有以相同的方式重写,这不是我希望实现的功能。例如:

http://www.example.com/   = /example 
http://www.example.com/example/ = /example 
http://www.example.com/example1/ = /example1 
http://www.example.com/example2/ = /example2 
http://www.example.com/example3/ = /example3 

我希望发生的是:

http://www.example.com/   = /example 
http://www.example.com/example/ = /example/example 
http://www.example.com/example1/ = /example/example1 
http://www.example.com/example2/ = /example/example2 
http://www.example.com/example3/ = /example/example3 

我应该发生的事情的理解如下:

  1. 申请获得http://www.example.com
  2. 第一个条件不符合,HTTP_HOST不匹配^ example.com $
  3. 第二个条件:比赛^ www.example.com
  4. 第三个条件:无REQUEST_URI,所以它不是^ /例子/
  5. 匹配
  6. 第四和第五:我尝试过和没有这些,但它似乎没有改变结果。我的理解是,如果这些行没有注释,我会马上看到不需要的东西(如果文件名和目录存在,重写就不会发生)。
  7. 将请求重写为example.com/example/
  8. 第六个条件:将URL与特定域匹配。
  9. 总是重写为使用此URL的/ example /子目录。

这似乎工作,但如果我尝试去http://www.example.com/example2/,我得到的问题。由于REQUEST_URI与/ example /不匹配,我的想法是它应该重写为/ example/example2,但这显然不会发生。

我没有访问Apache配置或设置VirtualHosts的能力,所以我希望有一些方法可以用.htaccess规则来做到这一点。任何关于我如何过分复杂化这个简单任务的见解都将非常有帮助。

+0

这些规则看起来是正确的。你确定重定向没有被你的浏览器缓存吗? – Ansari 2012-07-18 05:28:32

+0

是的,在使用CTRL + F5并手动删除缓存后,我尝试了多种浏览器(Chrome,Firefox和IE)。 – Jared 2012-07-18 10:59:47

回答

0

据我所知,如果根中的某个目录与进入的请求相匹配(即如果exam​​ple1存在于根目录中,则将RewriteCond重写/ example1到错误页面从未被触发)。

我对此的解决方案最终没有我希望的那么优雅,但它似乎正在工作。希望它可以帮助任何人绊倒这个问题。

在example1,example2和example3目录里面,我修改了。htaccess文件包括以下内容(基于目录的改变例1):

RewriteCond %{HTTP_HOST} ^(www\.)example\.com$ [NC] 
RewriteRule ^(.*)$ /example/example1/$1 [L] 

这迫使主域名服务是我为它创建的子目录中,即使有一个匹配的内容目录中的根目录。