利用.htaccess创建多站点

张开发
2026/4/18 2:45:41 15 分钟阅读

分享文章

利用.htaccess创建多站点
现在的许多虚拟主机虽然支持多域名绑定可是不提供子目录功能所以只能建立一个站点多个域名访问也都只能是同一个网站这未免有点不够良心。但是如果你的主机用的是Apache支持.htaccess文件配置的话.htaccess知识补充就能通过URL重写定向的方式实现不同域名默认访问不同目录从而达到绑定多个域名不同网站的功能首先要做好域名绑定主机和域名DNS解析。比如我的另一个站点Pictree就是用这种方法在本博客网站的虚拟机下建立的网站本网站Airicy不受影响把所有的摆设的停靠域都变成真正有用的附加域。另外我也用这方法做了个人页歡喜忧实现了同一域名下带www和不带www做不同网站功能代码略有不同同理可为网站子域名创建子目录。可以说你的虚拟机能绑定多少网站你就可以建多少个不同的网站极大限度的突破主机商给你的以下限制。网上也有许多的教程例子但是我都试过并不能较完美的实现虽说网站主页能够访问但是其引用的目录文件都不能访问导致网页只能是单个首页缺少css/js等文件。所以我修改了部分代码得到以下第一个版本为域名www.jfzm.cc和jfzm.cc绑定根目录下的Pic目录在网站根目录下的.htaccess文件里面添加IfModule mod_rewrite.c RewriteEngine On RewriteBase / RewriteCond %{HTTP_HOST} ^(www.)?jfzm.cc$ [NC] RewriteCond %{REQUEST_URI} !^/Pic/ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /Pic/$1 [L] RewriteCond %{HTTP_HOST} ^(www.)?jfzm.cc$ RewriteRule ^(/)?$ /Pic/index.php [L] /IfModule在Pic目录下的.htaccess文件里面添加IfModule mod_rewrite.c RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !(.*)/$ RewriteRule ^(.*)$ http://www.jfzm.cc/$1/ [L,R301] #只许绑定的域名访问 RewriteCond %{HTTP_HOST} !^(www.)?jfzm.cc$ [NC] RewriteRule ^(.*)$ http://www.jfzm.cc/$1 [L,R301] #对绑定目录下与 同名的目录的处理 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.)?jfzm.cc$ [NC] RewriteCond %{REQUEST_URI} !^/$ RewriteRule ^(.*)$ /Pic/$1 [L] /IfModule在Pic目录下的.htaccess文件里面添加IfModule mod_rewrite.c RewriteEngine On RewriteBase / RewriteCond %{HTTP_HOST} ^(www.)?jfzm.cc$ [NC] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /Pic/index.php [L] #只许绑定的域名访问 www跳非www RewriteCond %{HTTP_HOST} !^www.jfzm.cc$ [NC] RewriteRule ^(.*)$ http://www.jfzm.cc/$1 [L,R301] #对绑定目录下与 同名的目录的处理 RewriteCond %{HTTP_HOST} ^(www.)?jfzm.cc$ [NC] RewriteCond %{REQUEST_URI} ^/Pic/$ RewriteRule ^(.*)$ http://www.jfzm.cc/$1 [L,R301] /IfModule第二个版本更简单同时解决了第一个版本的许多问题不过由于对正则规则不够熟悉这两个版本对同名目录处理还是有某些BUG不能解决同名目录下的资源还是不能访问只能访问index首页虽然可以通过不建立同名目录或者资源来自别的目录来避免希望以后能够想办法更完美的处理。

更多文章