利用.htaccess绑定子域名到子目录及语法说明

  • A+
所属分类:常用代码

首先在本地建个txt文件,复制下面的代码修改替换你要绑的域名和目录,并传到网站主目录下再改成为.htaccess。 下面是以 dh.3366.vip绑定到子目录dh为例的.htaccess代码

<IfModule mod_rewrite.c> 
RewriteEngine On
RewriteBase /
# 绑定dh.3366.vip 到子目录dh
RewriteCond %{HTTP_HOST} ^dh\.3366\.vip$ [NC]
RewriteCond %{REQUEST_URI} !^/dh/
RewriteRule ^(.*)$ dh/$1?Rewrite [L,QSA]
#可以绑定多个 只需重复上三行代码并更改一下域名、目录名 就好了 
</IfModule>

如果你以完成上面的步骤 你的子域名应该可以访问了 但你会发现在浏览器上访问 主域名+绑定的域名目录 也可以访问,可这并不是我们想要的 接下来我们完成最后一步;在每一个绑定的目录中 如dh目录中 也增加一个 .htaccess 文件

.htaccess代码如下:

<IfModule mod_rewrite.c> 
RewriteEngine On
RewriteBase /
#只许绑定的域名访问
RewriteCond %{HTTP_HOST} !^dh\.3366\.vip$ [NC]
RewriteRule (.*) http://dh.3366.vip/$1 [L,R=301]
#对绑定目录下与 同名的目录的处理
RewriteCond %{REQUEST_URI} ^\/dh\/ [NC]
RewriteCond %{QUERY_STRING} !^(.*)?Rewrite
RewriteRule ^(.*)$ /%{REQUEST_URI}/%{REQUEST_URI}/$1?Rewrite [L,QSA] 
</IfModule>

.htaccess语法中RewriteCond和RewriteRule意义:
一、RewriteCond语法:
RewriteCond TestString CondPattern [Flags]
其中的TestString是指一个文本格式的条件 这是一个map(键值对)格式的数据类型。
CondPattern是条件参数
Flags标识是是第三个参数,可以用来紧跟下一个条件,这儿用OR表示或者,如果没有[Flags],则用隐含的AND,表示并且。其它的还可以NC等等,表示忽略大小写。
RewriteCond就像我们程序中的if语句一样,表示如果符合某个或某几个条件则执行RewriteCond下面紧邻的RewriteRule语句,这就是RewriteCond最原始、基础的功能。

看个例子:

RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} ^Mozilla/5.0.*
RewriteRule index.php index.m.php
RewriteCond %{HTTP_USER_AGENT} ^Lynx.*
RewriteRule index.php index.L.php
RewriteRule index.php index.b.php
上面语句的作用是当你是用FF浏览器访问index.php这个文件的时候,会自动让你访问到index.m.php这个文件,当你是用一些移动终端访问 的 时候,会让你对index.php这个文件的访问实际访问的是index.L.php去,如果你是用其它的浏览器访问的时候,会让你跳到 index.b.php。

二、RewriteRule的语法:
RewriteRule Pattern Substitution [Flags]
其中的Pattern就是参数,一般为一些文件的扩展名,Substitution是用来替换前面用的,这儿的Flags,常用的R表示 redirect(强制重定向),F表示forbidden(禁止访问),L表示last(最后),通常当你希望停止重写操作而立即重定向时,可用它。

.htaccess中用到的正则
元字符^(和数字6在同一个键位上的符号)和$都匹配一个位置,这和\b有点类似。
^匹配你要用来查找的字符串的开头
$匹配结尾。
比如一个网站如果要求你填写的QQ号必须为5位到12位数字时,可以使用:^\d{5,12}$。
通过.htaccess来防止网站的图片、压缩文件、或视频等非Html文件被盗链的方法相当简单,通过在该文件中加入几句命令即可保护我们宝贵的带宽。
用户盗链我们的资源会返回403(没有权限)错误

再看个防盗链的例子:

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?abc.com/.*$ [NC]
RewriteRule \.(gif|jpg|js|css)$ - [F]

[NC]表示不区分大小写
“RewriteEngine On”,开启 Rewrite 规则开关;
HTTP_REFERER:表示访问我们服务器的来源站点。
上面的含义是:如果来源站点不为空且来源站点不是(http://www.abc.com或http://abc.com)[网址不区分大小写] 则所有以.gif .jpg .js .css为后缀的文件都不能被访问.当然,对方如果伪造来源这样我们就束手无策了,例如对方伪造我们的站点采集我们的资源,这是另外的事了。

盗链内容自定义
你会经常看到有的网站显示“来自百度空间”或“图片无法显示”等图片,这是防盗链的另一种设置,即返回的是一个自定义图片,配置如下:
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www.)?example.com/(.*)$ [NC]
RewriteCond %{HTTP_REFERER} !^http://(www.)?google.com/(.*)$ [NC]
RewriteRule \.(gif|jpg)$ http://www.abc.com/image.gif [R,L]

禁止访问
RewriteRule ^.* - [F,L]
这里”-”表示没有替换,F表示禁止对URL地址的存取,L表示停止处理接下来的规则
例子:
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} ^MSIE [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Opera [NC]
RewriteRule ^.* - [F,L]

浏览器为IE和Opera的访客将被禁止访问。

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin
广告也精彩

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: