阿星的博客

记录下在一个虚拟主机中绑定并分别转发多个域名遇到的问题

有一个虚拟主机,可以绑定多个域名,即多个域名都可以指向到同一个空间里。

问,如何为这些个域名分别指向不同的目录进行站点展示?

其实如果不是虚拟主机或者支持违者多个域名分别设定站点目录,也就没这问题了。

问题就在于,现在这些域名都只能指向默认目录。

还好,大部分的虚拟主机都支持.htaccess,所以下面遇到的这些情况,就是在研究RewriteRule的时候遇到的问题。

如何将域名分别指向各自目录。

  • 在根目录分别建立多个目录,如 /AA//BB/
  • 在根目录下建一个.htaccess文件,贴入以下代码即可。
# 启动重写引擎
RewriteEngine On

RewriteBase /

# 绑定 a.com 到子目录
RewriteCond %{HTTP_HOST} ^a\.com$ [NC]
RewriteRule ^(.*)$ /AA/$1 [L,QSA]

# 绑定 b.com 到子目录
RewriteCond %{HTTP_HOST} ^b\.com$ [NC]
RewriteRule ^(.*)$ /BB/$1 [L,QSA]

如何禁止域名间互相访问

  • /AA/文件夹根目录下,建.htaccess文件,贴入以下代码即可。
# 启动重写引擎
RewriteEngine On

#只许绑定的域名访问
RewriteCond %{HTTP_HOST} !^a\.com$ [NC]
RewriteRule (.*) http://a.com/$1 [L,R=301]

如何禁止域名直接访问文件

  • 比如/AA/a.jpg应该只允许http://a.com/a.jpg访问,然而http://a.com/AA/a.jpg也能访问到。怎么办?
  • 不知道

多个.htaccess文件的优先级

  • 根目录和子目录下的.htaccess文件,谁的优先级高?
    • 子目录的.htaccess文件优先级高。
    • 所谓子目录的前提是,url 指向的路径的最接近的子目录。
      • 如上文里的http://a.com/a.jpg,它的最接近的目录是根目录而不是/AA/目录哦。
        • 所以会优先在根目录里进行转发。
      • http://a.com/AA/a.jpg的最接近子目录倒是/AA/目录。 *所以上面的那个问题,才难办啊。

END

原文来自阿星的博客:https://wanyaxing.com/blog/20180728172308.html

X