十二月 16th, 2015
comments
Closed

htaccess文件是Apache中相当重要的配置文件,其格式为纯文本,它提供了针对目录改变配置的方法,通过在一个特定的文档目录中放置一个包含一个或多个指令的文件,以作用于此目录及其所有子目录。

通过. htaccess文件,可以实现简单地很多在IIS中很繁琐甚至无法实现的功能,如密码保护、禁止显示目录列表、阻止/允许特定的IP地址、实现网址的301 重定向等等。

1、301重定向

出于SEO、网址转换的目的,在网址初建或者网站迁移时我们都需要使用301重定向,通常包括了域名对域名、目录对目录和一个独立网址对另一个独立网址的重定向。在Linux虚拟主机上做301重定向,最常用的方法就是直接编辑.htaccess文件或者用cPanel设定。实质上两者的本质的本质都是对.htaccess文件进行修改,我们这里主要讲第一种直接编辑.htaccess文件的方法。

如要重定向aips.com到www.aips.com旨在使域名唯一,只需打开.htaccess文件,加入以下代码

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www.aips.com$ [NC]
RewriteRule ^(.*)$ http://www.aips.com/$1 [L,R=301]

若要重定向文件的话,如需吧A.com/file/fileA.php 到 B.com/file/fileB.php,只需要加入以下代码:

RewriteCond %{HTTP_HOST} ^www.A.com$
RewriteRule ^file/file.php$ http://www.B.com/file/fileB.php [R=301,L]

2、防盗链功能

所谓盗链,是指其他网站直接链接我们网站上的文件,一般来说,盗链的对象大多为很耗带宽的大体积文件,如图片、视频等。这样就容易造成服务器的流量负担,从而影响网站的访问速度,为了保证我们的网站流量能被自己充分利用,我们可以通过修改.htaccess文件设置防盗链来限制外站引用站内文件,只需打开.htaccess文件,加入以下代码:

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$ [NC]
RewriteCond %{HTTP_REFERER} !aips.com [NC]//这一行是设置允许访问的HTTP来源,包括我们的站点自身,也可以另写一行将域名换成baidu、Google等。
RewriteRule .*.(gif|jpg|png)$ – [F]//格式根据不同情况删改,如mp3、rar等,不同格式之间用’”|”分割即可。

3、阻止/允许特定的IP地址

某些情况下,你可能只想允许某些特定IP的用户可以访问你的网站,或者想封禁某些特定的IP地址。当然,这只在你知道你想拦截的IP地址时才有用,然而现在网上的大多数用户都使用动态IP地址,所以这并不是限制使用的常用方法:

1、你可以使用以下命令封禁一个IP地址:

deny from 000.000.000.000
这里的000.000.000.000是被封禁的IP地址,如果你只指明了其中的几个,则可以封禁整个网段的地址。如你输入210.10.56.,则将封禁210.10.56.0~210.10.56.255的所有IP地址。

 

2、你也可以使用以下命令允许一个IP地址访问网站:

allow from 000.000.000.000
被允许的IP地址则为000.000.000.000,你可以象封禁IP地址一样允许整个网段。
3、如果你想阻止/允许所有人访问该目录,则可以使用:
deny from/allow from  all

4、自定义错误页

htaccess的一个应用是自定义错误页面,这将使你可以拥有自己的、个性化的错误页面(例如找不到文件时),而不是你的服务商提供的错误页或没 有任何页面。这会让你的网站在出错的时候看上去更专业。只需要在.htaccess文件中加入以下代码即可自定义几种最常用的错误:

ErrorDocument 400 /errors/badrequest.html//Bad request 错误请求

ErrorDocument 401 /errors/authreqd.html//Authorization Required 需要验证

ErrorDocument 403 /errors/forbid.html//Forbidden 禁止

ErrorDocument 404 /errors/notfound.html//Wrong page 找不到页面

ErrorDocument 500 /errors/serverr.html//Internal Server Error 内部服务器错误

5、压缩文件

通过压缩你的文件(text、html、JavaScript、css、xml等)体积来优化网站的访问速度,这对很多想提升网站访问速度的站长非常有用,你只需在.htaccess文件里面直接添加以下代码:

AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript

6、对某些文件缓存或禁止缓存

缓存文件是另外一个提高你的网站访问速度的好方法。你只需要在.htaccess文件中加入如下代码:

#<FilesMatch “.(flv|gif|jpg|jpeg|png|ico|swf|js|css|pdf)$”>
Header set Cache-Control “max-age=2592000″
</FilesMatch> >

而另一方面,你也可以定制对某些文件类型禁止使用缓存:

<FilesMatch “.(pl|php|cgi|spl|scgi|fcgi)$”>
Header unset Cache-Control
</FilesMatch>

7、省去WWW前缀

SEO的一个原则是,确保你的网站只有一个URL。因此,你需要把所有的通过www的访问转向的非www,或者反过来,你可以在.htaccess文件中加入如下代码实现:

RewriteEngine On 
RewriteBase / 
RewriteCond %{HTTP_HOST} ^www.aips.me [NC] 
RewriteRule ^(.*)$ http://aips.me/$1 [L,R=301]

8、防黑客

如果你想提高网站的安全等级,你可以加上下面的几行代码,这样可以防止一些常见恶意URL匹配的黑客攻击技术:

RewriteEngine On

RewriteCond %{QUERY_STRING} proc/self/environ [OR]//proc/self/environ? No Way!

RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|\%3D) [OR]// 阻止脚本企图通过URL修改mosConfig值

RewriteCond %{QUERY_STRING} base64_encode.*(.*) [OR]// 阻止脚本通过URL传递的base64_encode垃圾信息

RewriteCond %{QUERY_STRING} (<|%3C).*script.*(>|%3E) [NC,OR]//阻止在URL含有<script>标记的脚本

RewriteCond %{QUERY_STRING} GLOBALS(=|[|\%[0-9A-Z]{0,2}) [OR]//阻止企图通过URL设置PHP的GLOBALS变量的脚本

RewriteCond %{QUERY_STRING} _REQUEST(=|[|\%[0-9A-Z]{0,2})//阻止企图通过URL设置PHP的_REQUEST变量的脚本

RewriteRule ^(.*)$ index.php [F,L]//把所有被阻止的请求转向到403禁止提示页面

9、禁止显示目录列表

有些时候,你的目录里没有默认的index文件,当有人在浏览器地址栏访问该目录,目录下所有的文件都会显示出来,这会给你的网站留下安全隐患。为避免这种情况(而不必创建一堆的新index文件),可以在.htaccess文件中加入下面的代码来阻止目录列表的显示:

Options -Indexes

10、纠正代码的编码

开发程序的朋友知道,如果a页面是gb2312编码的,b页面是utf-8编码的, 如果a页面include引用b页面就会产生乱码,可以用.htaccess 为网页修正编码:很多朋友在写完一段代码上传到服务器后,经常出现了乱码的情况,而下面这个步骤,将解决因为代码编码而乱码的问题:

<FilesMatch “\.(htm|html|css|js)$”>

AddDefaultCharset UTF-8

11、实现网站目录密码保护

有时候你可能会针对某个目录设定对应的密码保护,首先要做的是生成一个.htpasswd的文档,然后输入用于访问网站的用户名和密码,代码为:

username:password

其中“password”的位置应该是加密过的密码。另外需要注意的是.htpasswd文档的位置最好放在www目录之外,这样相对会安全一些

然后在.htaccess文件中加入以下代码:

AuthUserFile /full/path/to/.htpasswd      //.htpasswd的服务器目录
AuthGroupFile /dev/null      //需要授权访问的目录
AuthName EnterPassword
AuthType Basic      //授权类型
Require valid-user

这样就完成了使用.htaccess文件实现网站目录密码保护。

另外,在使用.htaccess来设置目录的密码保护时,它包含了密码文件的路径。从安全考虑,有必要把.htaccess也保护起来,不让别人看到其中的内容。最简单的方法是在.htaccess文件中加入如下代码:

order allow,deny
deny from all

希望以上关于.htaccess文件的使用方法可以帮助到大家,

Comments are closed.