htaccess 域名目录分配
.htacces 真的很强大,我们使用.htaccess写入特定规则,就可以一个空间放多个网站,让不同域名进入绑定不同的文件夹,以下范例:
比如我们要根目录中实现以下的域名绑定子目录结构:
|—-.htaccess文件
|—-blog目录(绑定域名timle.cn/www.timle.cn)
|——–.htaccess文件
|—-aaa目录(绑定域名aaa.com)
|——–.htaccess文件
那么需要在网站根目录的.htaccess文件中添加以下内容:
RewriteEngine On RewriteBase / RewriteCond %{HTTP_HOST} ^(www\.)?timle\.cn$ [NC] RewriteCond %{REQUEST_URI} !^/blog/ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ blog/$1 RewriteRule ^(/)?$ blog/index.php [L]
这样我们就已经把www.timle.cn这个域名绑定到了blog这个子目录上面,相当于blog就是一个独立域名主机服务器。aaa.com同理。
但是如果只到这里,你会发现,当你通过aaa.com/blog/的方式也可以访问www.timle.cn里面的内容,这当然是我们不想看到的。也不利于seo。怎么样来防止其他域名访问www.timle.cn中的内容呢?接下来看下面
htaccess 禁止域名互相访问
blog目录中的.htaccess文件中添加以下内容:
RewriteEngine On # 禁止通过非本网站域名访问 RewriteCond %{HTTP_HOST} !^(www.)?timle.cn$ [NC] RewriteRule ^.*$ [L,r=404]
通过以上两个步骤,我们已经成功的实现了域名timle.cn绑定到blog子目录中,aaa.com同理,并且域名与域名间相互独立访问。
如果绑定多个域名到子目录,那么规则以此类推以上内容后重复即可!
亲自测试,正常可用!需要子目录绑定的空间推荐此办法!
htaccess 文件代码解释
- 【RewriteEngine On】
表示重写引擎开,关闭off,作用就是方便的开启或关闭以下的语句,这样就不需要一条一条的注释语句了。 - 【RewriteCond %{HTTP_HOST} ^(www\.)?timle\.cn$ [NC]】
表示重写条件,前面%{HTTP_HOST}表示当前访问的网址,只是指前缀部分,格式是www.timle.cn不包括“http://”和“/”,^表 示字符串开始,$表示字符串结尾,\.表示转义的. ,如果不转义也行,推荐转义,防止有些服务器不支持,?表示前面括号www\.出现0次或1次,这句规则的意思就是如果访问的网址是timle.cn或者 http://www.timle.cn就执行以下的语句,不符合就跳过。还有,不能保证每个人输入的网址都是小写的,如果输入大写的呢,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表示反向匹配,引用的是前面第一个圆括号的成分,即^(.*)$中 的.* 。