.htaccess基本语法和应用

常见格式

下面是一个典型的.htaccess文件:

# 开启URL重写

RewriteEngine on

# URL重写的作用域

# RewriteBase /path/to/url

# 满足怎样的条件

RewriteCond %{HTTP_HOST} !^www\.abcd9\.com$ [NC]

# 定义应用规则

RewriteRule ^(.*)$ http://www.abcd9.com/$1 [L,R=301]

RewriteCond:首先有一个%,因为{HTTP_HOST}是一个apache变量,需要用%来指示。从!符号开始就是匹配的条件,支持正则表达式。!表示不等于,此句代码表示:如果HTTP_HOST不为www.abcd9.com。

后缀含义:

[NC](no case):忽略大小写

[L](last):终止一系列的RewriteCond和RewriteRule

[R](redirect):触发一个显示的跳转,也可以指定跳转类型,如[R=301]

[F](forbidden):禁止查看特定文件,apache会触发403错误

典型应用

图片防盗链

RewriteCond %{HTTP_REFERER} !^$

RewriteCond %{HTTP_REFERER} !^http://(www\.)?abcd9\.com/ [NC]

RewriteRule \.(gif|jpg|png)$ - [F]

由于是基于HTTP_REFERER的验证,所以只能防止一般的图片盗链,因为HTTP_REFERER容易伪造。

自定义404错误页面

如用户输入url错误或页面丢失,则显示自定义的错误页面

ErrorDocument 404 /404.html

# 定义其他http状态码同理

ErrorDocument 500 /500.html

处理移动过的文件

Redirect 301 /old.html http://abcd9.com/new.html

# 也可以是下面写法

RewriteRule /old.html http://abcd9.com/new.html [R=301,L]

# 如果想隐式跳转(URL地址不变,但实际上内容是其他URL的),使用RewriteRule /old.html http://abcd9.com/new.html [L]

对于RewriteRule还可有其他应用,如:

# 把html后缀的url链接到php文件

# $1指代的是前面第1个用括号括起来的内容

RewriteRule ^/?([a-z/]+)\.html$ $1.php [L]

# 把旧文件夹的内容链接到新文件夹

RewriteRule ^/?old_directory/([a-z/.]+)$ new_directory/$1 [R=301,L]

# 隐藏文件名

RewriteRule ^/?([a-z]+)$ $1.php [L]

禁止显示目录列表

如果目录里没有index文件,又没有对该目录做过特别的处理,尤其是windows主机,那么该目录里的内容就会显示出来,解决这个问题的方法为:在根目录创建一个.htaccess文件输入一行代码

Options -Indexes

阻止/允许特定IP/IP段

# 禁止除了指定外的所有IP

order deny,allow

deny from all

# 如要允许IP段,如123.123.123.0 ~ 123.123.123.255,则

# allow from 123.123.123.

allow from 123.123.123.123

ErrorDocument 403 /page.html

 <Files page.html>

allow from all

</Files>

#禁止特定IP

deny from 123.123.123.123

添加MIME类型

AddType video/x-flv .flv

# 如果设置类型为 application/octet-stream 将提示下载

AddType application/octet-stream .pdf

你可能感兴趣的:(.htaccess基本语法和应用)