我试图用我当前的共享主机配置修复一些烦恼,但是我有一些问题会根据需要设置一切。.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
我应该发生的事情的理解如下:
- 申请获得http://www.example.com。
- 第一个条件不符合,HTTP_HOST不匹配^ example.com $
- 第二个条件:比赛^ www.example.com
- 第三个条件:无REQUEST_URI,所以它不是^ /例子/ 匹配
- 第四和第五:我尝试过和没有这些,但它似乎没有改变结果。我的理解是,如果这些行没有注释,我会马上看到不需要的东西(如果文件名和目录存在,重写就不会发生)。
- 将请求重写为example.com/example/
- 第六个条件:将URL与特定域匹配。
- 总是重写为使用此URL的/ example /子目录。
这似乎工作,但如果我尝试去http://www.example.com/example2/,我得到的问题。由于REQUEST_URI与/ example /不匹配,我的想法是它应该重写为/ example/example2,但这显然不会发生。
我没有访问Apache配置或设置VirtualHosts的能力,所以我希望有一些方法可以用.htaccess规则来做到这一点。任何关于我如何过分复杂化这个简单任务的见解都将非常有帮助。
这些规则看起来是正确的。你确定重定向没有被你的浏览器缓存吗? – Ansari 2012-07-18 05:28:32
是的,在使用CTRL + F5并手动删除缓存后,我尝试了多种浏览器(Chrome,Firefox和IE)。 – Jared 2012-07-18 10:59:47