由于本人最近一直在研究">Apache的官方手册,对.htaccess这个强大而灵活的配置文件产生了兴趣。同时,也有很多朋友向我询问.htaccess文件的相关疑难杂症,在此,我独家总结一下.htaccess这个文件的常见编写错误,也希望各位朋友能够汲取教训,达到更高的层次。
概述来说,htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。
Unix、Linux系统或者是任何版本的Apache Web服务器都是支持.htaccess的,但是有的主机服务商可能不允许你自定义自己的.htaccess文件。国内的大多数虚拟主机就没有这个功能。我所知道的提供这个功能的有康盛世纪(就是Discuz的论坛服务商)。
启用.htaccess,需要修改httpd.conf,启用AllowOverride,并可以用AllowOverride限制特定命令的使用。如果需要使用.htaccess以外的其他文件名,可以用AccessFileName指令来改变。例如,需要使用.config ,则可以在服务器配置文件中按以下方法配置:AccessFileName .config 。
笼统地说,.htaccess可以帮我们实现包括:文件夹密码保护、用户自动重定向、自定义错误页面、改变你的文件扩展名、封禁特定IP地址的用户、只允许特定IP地址的用户、禁止目录列表,以及使用其他文件作为index文件等一些功能。
1、.htaccess文件是Apache的配置文件,因此直接决定了此文件使用IIS构建的网站无效。
在官方的说明中,.htaccess是网站的一个分布式配置文件,分布式顾名思义,就是可以分布在各个不同的目录下面,每个文件都有其不同的作用域。比如将文件放在“admin”目录下,那么这个配置文件只对admin及其子目录下的文件生效。
然而有很多初入门道的朋友并不了解,因此不知道如何处理这个配置文件。在此我告诉大家,如果你想要整个网站都生效,就将此文件建立在网站根目录下即可。
2、此文件极易造成服务器500错误,并且大部分原因都是Windows文件编码错误。
由于该文件是原生Linux下的文件,因此在Windows下不能使用系统自带的记事本程序创建这个文件。但是,可以通过编码转换,去掉BOM等多余的内容。但是,我们强烈建议使用Notepad2等富文本编辑器来创建这个文件,并且将之保存为UTF-8这种国际编码格式。当然,也可以使用一些在线htaccess编辑器来自动创建这个文件,文后将会有相关介绍。
3、.htaccess文件设置图片防盗链时,替换的目标图片一定不能是当前域下的图片文件。否则将会造成循环错误。
很多朋友会使用.htaccess文件达到图片防盗链的效果,减少空间由于图片盗链浪费的流量。但是,却忽视了这一点:不能将替换后的目标图片放在本域中。原因如下:本域使用了图片防盗链功能,因此,所有通过其它域访问本域的图片地址都会被重写为目标地址,但如果目标地址也是本域中的图片,就会造成循环错误,甚至可能导致客户端浏览器假死。
4、WWW域名统一跳转指令的安全写法。
很多朋友都会通过.htaccess文件将带WWW的域名与不带WWW的域名统一,然后写出了类似如下语句:
RewriteCond %{HTTP_HOST} !^www.domain.com? [NC]
注意,这是一种极不安全且不负责任的写法,原因在于使用了“!”(非)。这种写法将会把.htaccess所有作用域下的网址都进行跳转,比如会将“m.domain.com”跳转成“www.domain.com”,会把“bbs.domain.com也跳转成“www.domain.com”。其可能造成的问题可想而知。所以,该指令的正确、安全的写法应该是:
RewriteCond %{HTTP_HOST} ^(domain\.com)(:80)? [NC]
这就避免了干扰其它的子域名,同时,也避免了主机其它端口的跳转。这是一种非常严格而且安全的写法。