1 .htaccess是什么?
.htaccess是用于运行Apache Web服务器的配置文件。当.htaccess文件被放置在一个目录中,而这个目录又是通过Web服务器加载的,则Apache Web服务器会检测并执行.htaccess文件,以提供比Apache配置文件httpd.conf更精细的控制,且其语法与Apache其他配置文件完全相同。
2 为什么使用.htaccess?
目前很多网站都是租用服务器或虚拟主机的,其服务器的配置不能随意修改,当Apache配置安全性较低或者对网站访问有特殊需求时,均可通过配置Apache的.htaccess文件来实现。
(1)容错文件
创建自定义错误页面非常有用,它允许向网站访问者显示友好的错误消息。例如,如果网站的URL不起作用,这可避免不友好的“404 FileNot Found”错误,并允许显示友好的错误页面,引导用户重新访问网站内容。
(2)重定向
可使用户访问从网站的一个路径引导到另一个路径中,使访问的用户看不到真实路径,保护Web服务器真实访问路径,提高Web访问安全性。
(3)密码保护
Apache Web Server提供的密码保护和身份验证系统可能是.htaccess文件最重要的用途。可以设置使用用户名和密码才能访问网站文件或目录。这些安全目录的登录过程由Web浏览器使用弹出式登录界面自动处理。
(4)提高访问速度
.htaccess可以用过压缩文件体积来优化提高网站的访问速度,也可以通过设置文件缓存文件提高访问效率。
(5)限制IP地址访问
提供访问者组织功能,使Web服务器能够拒绝被特定访问者访问,或者允许特定访问者访问。这对于阻止不受欢迎的访问者或仅允许网站所有者访问网站的部分内容非常有用。
(6)防盗链技术
可阻止其他网站“盗用”本网站的资源内容(如文件、图像等),降低“带宽盗窃”的机率。
1.3如何使用.htaccess?
(1)配置.htaccess生效
在Apache环境下,需要修改Apache的httpd.conf配置文件以下两点,才能使配置文件生效,具体如下所示。
修改httpd.conf配置文件中“AllowOverride none”改为“AllowOverride alll”,这样就可以指明.htaccess是否能够作为Apache服务器的配置文件;
去掉httpd.conf配置文件中“LoadModule rewrite_module modules/mod_rewrite.so”前面的“#”,这样就可以指明.htaccess是否有重新写入、修改Apache配置的权限。
(2)语法格式
.htaccess文件中主要采用rewrite模块内容,其常用语法格式如下所示。
RewriteEngine On:设置是否开启或停用rewrite功能;
RewriteBase url-path:设定基准目录,如希望对根目录下的文件rewrtie,就是”/”;
RewriteCond test-stringcondPattern:RewriteCond指令定义了一个规则的条件,即,在一个RewriteRule指令之前有一个或多个RewriteCond指令。条件之后的重写规则仅在当前URI与pattern匹配并且符合这些条件的时候才会起作用;
RewriteRule PatternSubstitution:RewriteRule指令是重写引擎的根本。此指令可以多次使用。每个指令定义一个简单的重写规则。这些规则的定义顺序尤为重要, 因为,在运行时刻,规则是按这个顺序逐一生效的。
场景模拟配置
(1)禁止服务器对外显示目录结构,其配置如下所示。
Options All –Indexes
(2)实现图片、样式文件防盗链,其配置如下所示。
RewriteEngine on
RewriteCond%{HTTP_REFERER}!^ $
RewriteCond%{HTTP_REFERER}!^ http://(www )?yourdomain.com /.*$ [NC]
RewriteRule (gif |jpg | css | png)$ - [ F]
(3)阻止访问PHP包含文件,其配置如下所示。
RewriteEngine On
RewriteBase /
RewriteCond%{THE_REQUEST} ^ [AZ] {3,9} / includes / * $ [ NC]
RewriteCond%{REQUEST_FILENAME} ^ + .php $
RewriteRule * - [F,NS,L]