.htaccess子代码,子域和插件域

时间:2013-07-12 19:47:23

标签: apache .htaccess

这是我的设置

  • 主域名:foo.com
  • 子域名:sub.foo.com
  • AddOn Domain:bar.com

Root上子域的目录结构是:

sub/ - 对于子域(默认值)

现在我在根目录

中为bar.com创建一个子文件夹

bar/ - 适用于bar.com

并创建了以下规则

RewriteCond %{HTTP_HOST} bar.com
RewriteCond %{REQUEST_URI} !bar/
RewriteRule ^(.*)$ bar/$1 [L]

结果将是。

  • sub.foo.com - sub /
  • bar.com - bar /
  • bar.com/bar - bar /(如何修复此问题?以便重定向到bar.com?
  • bar.com/sub - sub /(如何修复此问题?以便重定向到sub.foo.com?
  • foo.com/bar - bar /(如何修复此问题?以便重定向到bar.com?
  • foo.com/sub - sub /(如何修复此问题?以便重定向到sub.foo.com?

所以底线是我不希望用户直接访问目录树上的子目录。这可能吗?如何?

编辑:请不要开始讲述虚拟主机,我无法访问此服务器上的httpd.conf

1 个答案:

答案 0 :(得分:0)

在主网站的.htaccess

RewriteCond %{HTTP_HOST} 

RewriteCond %{HTTP_HOST} www.foo.com
RewriteCond %{REQUEST_FILENAME} ^bar
RewriteRule ^bar/(.*)$ http://www.bar.com/$1 [R=301,L,QSA]

RewriteCond %{HTTP_HOST} www.foo.com
RewriteCond %{REQUEST_FILENAME} ^sub
RewriteRule ^sub/(.*)$ http://sub.foo.com/$1 [R=301,L,QSA]

从子目录托管的其他2个网站不应该尝试使用此设置尝试映射bar.com/bar/...之类的内容。

bar.com网站中,您可以执行此操作:

RewriteBase /
RewriteCond %{REQUEST_FILENAME} ^bar/(.*)$
RewriteRule .* %1 [R=301,L,QSA]

RewriteRule ^bar/?$ / [R=301,L,QSA]

RewriteCond %{HTTP_HOST} www.bar.com
RewriteCond %{REQUEST_FILENAME} ^sub
RewriteRule ^sub/(.*)$ http://sub.foo.com/$1 [R=301,L,QSA]

对于sub.foo.com,你可以这样做:

RewriteBase /
RewriteCond %{REQUEST_FILENAME} ^sub/(.*)$
RewriteRule .* %1 [R=301,L,QSA]

RewriteRule ^sub/?$ / [R=301,L,QSA]

RewriteCond %{HTTP_HOST} sub.foo.com
RewriteCond %{REQUEST_FILENAME} ^bar
RewriteRule ^bar/(.*)$ http://www.bar.com/$1 [R=301,L,QSA]