使用.htaccess 实现一个主机添加多个独立网站

如果你的主机有1G的空间,可以绑定20个域名,只用来放一个网站会不会太浪费啦,那是肯定很浪费的。接下来我们来看看怎么通过htaccess,让不同域名绑定不同子目录,从而实现同一个主机建立多个独立网站。

.htacces 真的很强大,我们使用.htaccess写入特定规则,就可以一个空间放多个网站,让不同域名进入绑定不同的文件夹,以下范例:

比如我们要根目录中实现以下的域名绑定子目录结构:

|—-.htaccess文件

|—-blog目录(绑定域名ffs.me/www.ffs.me)

|——–.htaccess文件

|—-aaa目录(绑定域名aaa.com)

|——–.htaccess文件

那么需要在网站根目录的.htaccess文件中添加以下内容:

RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} ^(www\.)?ffs\.me$ [NC]
RewriteCond %{REQUEST_URI} !^/blog/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ blog/$1
RewriteRule ^(/)?$ blog/index.php [L]
这样我们就已经把www.ffs.me这个域名绑定到了blog这个子目录上面,相当于blog就是一个独立域名主机服务器。aaa.com同理。
但是如果只到这里,你会发现,当你通过aaa.com/blog/的方式也可以访问www.ffs.me里面的内容,这当然是我们不想看到的。也不利于seo。怎么样来防止其他域名访问www.ffs.me中的内容呢?接下来看下面

在blog目录中的.htaccess添加以下内容:

RewriteEngine On
# 禁止通过非本网站域名访问
RewriteCond %{HTTP_HOST} !^(www.)?ffs.me$ [NC]
RewriteRule ^.*$ [L,r=404]

通过以上两个步骤,我们已经成功的实现了域名ffs.me绑定到blog子目录中,aaa.com同理,并且域名与域名间相互独立访问。

如果绑定多个域名到子目录,那么规则以此类推以上内容后重复即可!

亲自测试,正常可用!需要子目录绑定的空间推荐此办法!

  • 【RewriteEngine On】
    表示重写引擎开,关闭off,作用就是方便的开启或关闭以下的语句,这样就不需要一条一条的注释语句了。
  • 【RewriteCond %{HTTP_HOST} ^(www\.)?ffs\.me$ [NC]】
    表示重写条件,前面%{HTTP_HOST}表示当前访问的网址,只是指前缀部分,格式是www.ffs.me括“http://”和“/”,^表 示字符串开始,$表示字符串结尾,\.表示转义的. ,如果不转义也行,推荐转义,防止有些服务器不支持,?表示前面括号www\.出现0次或1次,这句规则的意思就是如果访问的网址是ffs.me或者 www.ffs.me就执行以下的语句,不符合就跳过。还有,不能保证每个人输入的网址都是小写的,如果输入大写的呢,linux系统是区分大小写的,所以应该在RewriteCond后添加[NC]忽略大小写的。
  • 【RewriteCond %{REQUEST_URI} !^/blog/】
    也是重写条件,%{REQUEST_URI}表示访问的相对地址,就是相对根目录的地址,就是域名/后面的成分,格式上包括最前面的“/”,!表示非,这句语句表示访问的地址不以/blog/开头,只是开头^,没有结尾$
  • 【RewriteCond %{REQUEST_FILENAME} !-f】
    【RewriteCond %{REQUEST_FILENAME} !-d】
    这两句语句的意思是请求的文件或路径是不存在的,如果文件或路径存在将返回已经存在的文件或路径
  • 【RewriteRule ^(.*)$ blog/$1】
    表示重写规则,最重要的部分,意思是当上面的RewriteCond条件都满足的时候,将会执行此重写规则,^(.*)$是一个正则表达的 匹配,匹配的是当前请求的URL,^(.*)$意思是匹配当前URL任意字符,.表示任意单个字符,*表示匹配0次或N次(N>0),后面 /blog/$1是重写成分,意思是将前面匹配的字符重写成/blog/$1,这个$1表示反向匹配,引用的是前面第一个圆括号的成分,即^(.*)$中 的.* 。

转载请注明:《使用.htaccess 实现一个主机添加多个独立网站

发表评论