虚拟主机子目录绑定域名

时间:2022-7-29    分类: 学习日记


正常的话,虚拟主机是不支持子目录绑定域名的。如果需要子目录绑定域名就要额外花钱,开通此功能,然而通过修改虚拟主机目录下面的.htaccess文件,是可以实现虚拟主机子目录绑定域名的。例如我们要把music.qukeke.cn绑定到虚拟主机下的cfcf文件夹.
虚拟主机子目录绑定域名
正常解析绑定域名后,用ftp工具下载虚拟主机根目录下面的.htaccess文件,添加一下代码:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

# 绑定music.qukeke.cn到子目录cfcf

RewriteCond %{HTTP_HOST} ^music\.qukeke\.cn$ [NC]
RewriteCond %{REQUEST_URI} !^/cfcf/
RewriteRule ^(.*)$ cfcf/$1?Rewrite [L,QSA]

#注意:如果需要绑定多个, 则重复上三行代码并更改一下域名、目录名

</IfModule>

注意:
一般虚拟主机下的.htaccess文件默认会有这段代码的前3行和最后一行(意思就是开启了这个功能)。所以我们只需要把中间3行加入到原来代码的中间就行,有多个就重复粘贴修改就行。

完成上面操作之后,你就能发现你的二级域名可以访问子目录啦。但是这样操作会出现一个小bug:在浏览器上访问主域名+绑定的域名目录也可以访问;比如虚拟主机绑定的主域名是qukeke.cn,我们用qukeke.cn/cfcf或者music.qukeke.cn/cfcf访问的效果和music.qukeke.cn访问的页面一样。
如果这样不影响,那么你可以忽略以下步骤。
如何解决这个问题,我们在子目录添加一个.htaccess文件,只让该目录绑定的域名来访问。

<IfModule mod_rewrite.c>

RewriteEngine On

RewriteBase /

#只许绑定的域名访问

RewriteCond %{HTTP_HOST} !^music\.qukeke\.cn$ [NC]

RewriteRule (.*) https://music.qukeke.cn/$1 [L,R=301]

#对绑定目录下与 同名的目录的处理

RewriteCond %{REQUEST_URI} ^\/cfcf\/ [NC]

RewriteCond %{QUERY_STRING} !^(.*)?Rewrite

RewriteRule ^(.*)$ /%{REQUEST_URI}/%{REQUEST_URI}/$1?Rewrite [L,QSA]

</IfModule>

注意:如果虚拟主机下面没有.htaccess文件,可能虚拟主机不支持,还有可能是ftp没有显示隐藏文件。