概述:其实.htaccess文件相当于是从http.conf文件继承的文件,只是作用的范围不一样,http.conf的配置作用于服务器上的所有网站,.htaccess只作用于其定义的文件夹下。.htaccess文件主要用于一个服务器下有多个站点,每个站点的配置又不一样的情况下。
理论上说,使用.htaccess文件会影响服务器的性能,并且基本上在.htaccess文件中设置的功能都可以在http.conf文件中设置。所以如果一个服务器上只有一个站点的话,基本上可以不使用.htaccess文件。但是在实际开发中基本上还是都使用的.htaccess文件。下面详细分析一下.htaccess文件的语法。
#开启rewrite
RewriteEngine On
#定义该.htaccess文件的作用范围
RewriteBase /
#禁止显示文件列表
Options -Indexes
#自定义错误页面
ErrorDocument 404 /errors/notfound.html
ErrorDocument 401 "你没有权限访问该页面,请放弃!"
#禁止一个IP访问本目录
deny from 192.168.1.1
#禁止某个IP段
deny from 192.168.1.
#禁止所有
deny from all
#该目录下的缺省文件名 可以列出多个,顺序表明他们的优先级别
DirectoryIndex filename.html index.cgi index.pl default.htm
#重定向
Redirect /olddirectory http://www.w3sky.com/newdirectory
#防盗链
RewriteCond %{ HTTP_REFERER } !^$
RewriteCond %{ HTTP_REFERER } !^http://(www.)?w3sky.com/.*$ [NC] #这里的NC是标示符,标示忽略大小写
RewriteRule .(gif &line;jpg)$ http://www.w3sky.com/替代图片文件名 [R,L] #R标示强制重定向,L标示最后一条规则,也就是说如果执行了这条规则就不再执行其后面的规则,类似于程序语言中的break;
#去除www
RewriteCond %{HTTP_HOST} ^www.yourdomain.tld$ [NC]
RewriteRule ^(.*)$ http://yourdomain.tld/$1 [R=301,L] #R强制重定向,并且HTTP的相应码为302
RewriteCond %{REQUEST_FILENAME} !-f # !-f如果不是文件
RewriteCond %{REQUEST_FILENAME} !-d # !-d 如果不是目录
# Rewrite all other URLs to index.php/URL
RewriteRule .* index.php/$0 [PT] # PT移交给下一个处理器(还没弄懂这个是什么意思)
这里需要说明一下 RewriteCond的意义,这个语句类似于我们写程序时的if语句,而紧跟其后的RewriteRule语句相当于if语句里面的执行体,也就是当RewriteCond后面的条件成立时才执行其后面的RewriteRule规则,一个RewriteRule规则前面可以有多个RewriteCond,默认他们之间与(AND)的关系,也就是只有所有的RewriteCond都成立时,如果要使用或(OR)的关系,需要显示说明