服务热线
1888888888
作者:文煞发布时间:2023-12-13分类:站长笔记浏览:315
当前许多虚拟主机虽然支持多域名绑定,但却不提供子目录功能。因此,用户只能建立一个站点,且多个域名访问也只能指向同一个网站,这在某种程度上有些不尽人意。然而,如果你的主机是使用Apache,并支持.htaccess文件配置的话,就可以通过URL重写定向的方式实现不同域名默认访问不同目录的功能,从而实现绑定多个域名到不同网站的需求(在进行域名绑定和DNS解析之前要注意)。举例来说,我的另一个站点Pictree就是通过这种方法在我的博客网站的虚拟机下建立的。这样一来,我的博客网站Airicy并不会受到任何影响,同时我还可以将所有没用的域名重定向到真正有用的附加域上。此外,我也使用了同样的方法来创建了个人页“歡喜忧”,在同一域名下,通过www和非www的不同,实现了不同网站功能(代码略有不同),同样的方法也可以用于创建网站子域名的子目录。可以说,你的虚拟机能够绑定多少网站,你就可以建立多少个不同的网站,从而极大地突破了主机商给予的限制。
虽然网络上有许多教程和示例,但我试过之后并不能完全实现我想要的效果。虽然网站的主页可以访问,但其引用的目录文件却无法访问,导致网页变得只有单独的首页,缺少了CSS、JS等文件。
因此,我进行了代码的修改,得到了以下第一个版本(将域名wwwadminbk.com和adminbk.com绑定到根目录下的Pic目录):
在网站根目录下的.htaccess文件里面添加
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{HTTP_HOST} ^(www.)?adminbk.com$ [NC] RewriteCond %{REQUEST_URI} !^/Pic/ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /Pic/$1 [L] RewriteCond %{HTTP_HOST} ^(www.)?adminbk.com$ RewriteRule ^(/)?$ /Pic/index.php [L] </IfModule>
在Pic目录下的.htaccess文件里面添加
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !(.*)/$ RewriteRule ^(.*)$ http://adminbk.com/$1/ [L,R=301] #只许绑定的域名访问 RewriteCond %{HTTP_HOST} !^(www.)?jfzm.cc$ [NC] RewriteRule ^(.*)$ http://www.adminbk.com/$1 [L,R=301] #对绑定目录下与 同名的目录的处理 RewriteCond %{REQUEST_URI} ^/Pic/$ [NC] RewriteRule ^(.*)$ /%{REQUEST_URI}/%{REQUEST_URI}/$1 [L] </IfModule>
由于通过规则绑定的站点访问资源需要添加demo目录作为路径,其根目录仍然为原来的根目录,因为根目录是原来默认不写规则绑定的网站,文件资源可能会穿插,这对网站建设还是有点不足。所以我自己学了点正则做了第二个版本:
在网站根目录下的.htaccess文件里面添加
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{HTTP_HOST} ^(www.)?adminbk.com$ [NC] RewriteCond %{REQUEST_URI} !^/$ RewriteRule ^(.*)$ /Pic/$1 [L] </IfModule>
在Pic目录下的.htaccess文件里面添加
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{HTTP_HOST} ^(www.)?adminbk.com$ [NC] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /Pic/index.php [L] #只许绑定的域名访问 www跳非www RewriteCond %{HTTP_HOST} !^www.adminbk.com$ [NC] RewriteRule ^(.*)$ http://www.adminbk.com/$1 [L,R=301] #对绑定目录下与 同名的目录的处理 RewriteCond %{HTTP_HOST} ^(www.)?adminbk.com$ [NC] RewriteCond %{REQUEST_URI} ^/Pic/$ RewriteRule ^(.*)$ http://www.adminbk.com/$1 [L,R=301] </IfModule>
第二个版本更为简洁,同时也解决了第一个版本中的许多问题。不过,由于对正则表达式规则不够熟悉,这两个版本依然存在一些无法解决的问题,尤其是对于同名目录的处理(同名目录下的资源仍然无法访问,只能访问该目录下的index首页)。尽管可以通过避免在同名目录下建立资源或从其他目录引用资源来解决这个问题,但仍然希望能够找到更完美的解决方法。
分享:
支付宝
微信