Apache服务器的.htaccess是一个非常强大的分布式配置文件,学会使用的话,对虚拟主机用户来说,可以实现众多的功能。尽管.htaccess只是一个文件,但它可以更改服务器的设置,允许你做许多不同的事情,最流行的功能是您可以创建自定义的“404 error”页面。.htaccess 并不难于使用,归根结底,它只是在一个text文档中添加几条简单的指令而已。
 
功能作用:
 
    .htaccess可以做大量的事情,包括:文件夹密码保护、用户自动重定向、自定义错误页面、改变你的文件扩展名、封禁特定IP地址的用户、只允许特定IP地址的用户、禁止目录列表,以及使用其他文件作为index文件。
 
特别说明:
 
启用.htaccess,需要修改httpd.conf,启用AllowOverride,并可以用AllowOverride限制特定命令的使用
如果需要使用.htaccess以外的其他文件名,可以用AccessFileName指令来改变。例如,需要使用.config ,则可以在服务器配置文件中按以下方法配置:AccessFileName .config
 
apache开启url重写
 
httpd.conf下查找mod_rewrite.so 去掉前面的#即可
LoadModule rewrite_module modules/mod_rewrite.so
 
IIS服务器
 
<directory>中 AllowOverride none改成AllowOverride all
 
 
.htaccess 命令写法
 
1、基本
 
<Files ~ "^.(htaccess|htpasswd)$">
 
deny from all
 
</Files>
 
order deny,allow
 
Files后的波浪线表示启用“正则表达式”,简单的写法有:<Files *>,Order命令:通过Allow,Deny参数,Apache首先找到并应用Allow命令,然后应用Deny命令,以阻止所有访问,也可以使用Deny,Allow。也就是说deny 代表不允许,allow代表允许
 
2、图片缓存
 
<FilesMatch ".(gif|jpg|jpeg|png|ico)$">
Header set Cache-Control "max-age=3600"
</FilesMatch>
max-age后面代表缓存时间,单位秒
 
3、自定义错误页面
 
ErrorDocument 错误代码  页面地址
 
4、预设页面
 
多个之间用空格隔开,越左边,优先级越高
DirectoryIndex index.php index.html
 
5、www重定向
 
RewriteEngine on
 
RewriteCond %{HTTP_HOST} ^(to\.com)(:80)? [NC]
 
RewriteRule ^(.*) http://www.to.com/$1 [R=301,L]
 
<pre name="code" class="plain">
302重定向是暂时的重定向,搜索引擎会抓取新的内容而保留旧的网址 
301代表永久性转移
重定向后的地址为www.to.com
 
写法说明:
NC :no case,不区分大小写,忽略大小写;
L : last,表示已是最后一条规则,.htaccess文件解析将退出;
R :  redirect,重定向;
F :  forbidden,禁止访问。
 
6、图片防盗链接
 
RewriteEngine on
 
RewriteCond %{HTTP_REFERER} !^$
 
RewriteRule .*\.(gif|jpg|jpeg|bmp|png)$ http://www.example.com/photo.jpg [R,NC]
 
7、使用 GZIP 对输出进行压缩
 
<IfModule mod_gzip.c>
 
    mod_gzip_on       Yes
 
    mod_gzip_dechunk  Yes
 
    mod_gzip_item_include file      \.(html?|txt|css|js|php|pl)$
 
    mod_gzip_item_include handler   ^cgi-script$
 
    mod_gzip_item_include mime      ^text/.*
 
    mod_gzip_item_include mime      ^application/x-javascript.*
 
    mod_gzip_item_exclude mime      ^image/.*
 
    mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
 
</IfModule>
 
使用上面代码的前提是启用 mod_gzip 模块
 
8、禁止脚本执行
 
Options -ExecCGI
AddHandler cgi-script .php .pl .py .jsp .asp .htm .shtml .sh .cgi
 
9、URL 重写
 
RewriteEngine on
RewriteRule ^filename-([0-9]+)\.html$ filename.php?id=$1
 
    一般情况下,不应该使用.htaccess文件,除非你对主配置文件没有访问权限。有一种很常见的误解,认为用户认证只能通过.htaccess文件实现,其实并不是这样,把用户认证写在主配置文件中是完全可行的,而且是一种很好的方法。.htaccess文件应该被用在内容提供者需要针对特定目录改变服务器的配置而又没有root权限的情况下。
 
    如果服务器管理员不愿意频繁修改配置,则可以允许用户通过.htaccess文件自己修改配置,尤其是ISP在同一个机器上运行了多个用户站点,而又希望用户可以自己改变配置的情况下。虽然如此,一般都应该尽可能地避免使用.htaccess文件。任何希望放在.htaccess文件中的配置,都可以放在主配置文件的段中,而且更高效。避免使用.htaccess文件有两个主要原因,即性能和安全。