« 1 2» Pages: ( 1/2 total )
本页主题: .htaccess实用指南 打印 | 加为IE收藏 | 复制链接 | 收藏主题 | 上一主题 | 下一主题

HarbinBeer
级别: 管理员


精华: 1
发帖: 1278
活跃度: 2005 点
金钱: 10861 RMB
贡献: 0 点
注册时间:2006-10-10
最后登录:2008-11-21

 .htaccess实用指南

管理提醒:
本帖被 HarbinBeer 执行置顶操作(2008-06-10)
首先,来看看Apache手册中关于.htaccess的说明:
.htaccess 文件
相关模块相关指令
工作原理和使用方法
.htaccess文件(或者"分布式配置文件")提供了针对每个目录改变配置的方法,即在一个特定的目录中放置一个包含指令的文件,其中的指令作用于此目录及其所有子目录。
说明:
如果需要使用.htaccess以外的其他文件名,可以用AccessFileName指令来改变。例如,需要使用.config ,则可以在服务器配置文件中按以下方法配置:
AccessFileName .config
通常,.htaccess文件使用的配置语法和主配置文件一样。AllowOverride指令按类别决定了.htaccess文件中哪些指令才是有效的。如果一个指令允许在.htaccess中使用,那么在本手册的说明中,此指令会有一个覆盖项段,其中说明了为使此指令生效而必须在AllowOverride指令中设置的值。
例如,本手册对AddDefaultCharset指令的阐述表明此指令可以用于.htaccess文件中(见"作用域"项),而覆盖项一行是FileInfo ,那么为了使.htaccess中的此指令有效,则至少要设置 AllowOverride FileInfo
例子:
作用域server config, virtual host, directory, .htaccess
覆盖项FileInfo
如果不能确定某个指令是否可以用于.htaccess文件,可以查阅手册中对指令的说明,看在"作用域"行中是否有".htaccess" 。
(不)使用.htaccess文件的场合
一般情况下,不应该使用.htaccess文件,除非你对主配置文件没有访问权限。有一种很常见的误解,认为用户认证只能通过.htaccess文件实现,其实并不是这样,把用户认证写在主配置文件中是完全可行的,而且是一种很好的方法。
.htaccess文件应该被用在内容提供者需要针对特定目录改变服务器的配置而又没有root权限的情况下。如果服务器管理员不愿意频繁修改配置,则可以允许用户通过.htaccess文件自己修改配置,尤其是ISP在同一个机器上运行了多个用户站点,而又希望用户可以自己改变配置的情况下。
虽然如此,一般都应该尽可能地避免使用.htaccess文件。任何希望放在.htaccess文件中的配置,都可以放在主配置文件的<Directory>段中,而且更高效。
避免使用.htaccess文件有两个主要原因。
首先是性能。如果AllowOverride启用了.htaccess文件,则Apache需要在每个目录中查找.htaccess文件,因此,无论是否真正用到,启用.htaccess都会导致性能的下降。另外,对每一个请求,都需要读取一次.htaccess文件。
还有,Apache必须在所有上级的目录中查找.htaccess文件,以使所有有效的指令都起作用(参见指令的生效),所以,如果请求/www/htdocs/example中的页面,Apache必须查找以下文件:
/.htaccess
/www/.htaccess
/www/htdocs/.htaccess
/www/htdocs/example/.htaccess

总共要访问4个额外的文件,即使这些文件都不存在。(注意,这可能仅仅由于允许根目录"/"使用.htaccess ,虽然这种情况并不多。)
其次是安全。这样会允许用户自己修改服务器的配置,这可能会导致某些意想不到的修改,所以请认真考虑是否应当给予用户这样的特权。但是,如果给予用户较少的特权而不能满足其需要,则会带来额外的技术支持请求,所以,必须明确地告诉用户已经给予他们的权限,说明AllowOverride设置的值,并引导他们参阅相应的说明,以免日后生出许多麻烦。
注意,在/www/htdocs/example目录下的.htaccess文件中放置指令,与在主配置文件中<Directory /www/htdocs/example>段中放置相同指令,是完全等效的。
/www/htdocs/example目录下的.htaccess文件:
/www/htdocs/example目录下的.htaccess文件的内容:
AddType text/example .exm
httpd.conf文件中摘录的内容:
<Directory /www/htdocs/example>
AddType text/example .exm
</Directory>

但是,把配置放在主配置文件中更加高效,因为只需要在Apache启动时读取一次,而不是在每次文件被请求时都读取。
AllowOverride设置为none可以完全禁止使用.htaccess文件:
AllowOverride None
指令的生效
.htaccess文件中的配置指令作用于.htaccess文件所在的目录及其所有子目录,但是很重要的、需要注意的是,其上级目录也可能会有.htaccess文件,而指令是按查找顺序依次生效的,所以一个特定目录下的.htaccess文件中的指令可能会覆盖其上级目录中的.htaccess文件中的指令,即子目录中的指令会覆盖父目录或者主配置文件中的指令。
例子:
/www/htdocs/example1目录中的.htaccess文件有如下内容:
Options +ExecCGI
(注意:必须设置"AllowOverride Options"以允许在.htaccess中使用"Options"指令)
/www/htdocs/example1/example2目录中的.htaccess文件有如下内容:
Options Includes
由于第二个.htaccess文件的存在,/www/htdocs/example1/example2中的CGI执行是不允许的,而只允许 Options Includes ,它完全覆盖了之前的设置。
将.htaccess合并到主配置文件中
正如在配置段(容器)中讨论的那样,.htaccess文件能够覆盖<Directory>段中对相应目录的设置,但是也同样会被主配置文件中其它类型的配置段所覆盖。这个特性可以用来强制实施某些配置,甚至在AllowOverride已经许可的情况下。举个例子来说,为了强迫在.htaccess中禁止脚本执行但不限制其它的情况下,可以这样:
<Directory />
Allowoverride All
</Directory>

<Location />
Options +IncludesNoExec -ExecCGI
</Location>

认证举例
如果你只是为了知道如何认证,而直接从这里开始看的,有很重要的一点需要注意,有一种常见的误解,认为实现密码认证必须要使用.htaccess文件,其实是不正确的。把认证指令放在主配置文件的<Directory>段中是一个更好的方法,而.htaccess文件应该仅仅用于无权访问主配置文件的时候。参见上述关于何时应该与何时不应该使用.htaccess文件的讨论。
有此声明在先,如果你仍然需要使用.htaccess文件,请继续看以下说明。
.htaccess文件的内容:
AuthType Basic
AuthName "Password Required"
AuthUserFile /www/passwords/password.file
AuthGroupFile /www/passwords/group.file
Require Group admins

必须设置 AllowOverride AuthConfig 以允许这些指令生效。
更详细的说明,请参见认证、授权、访问控制
服务器端包含(SSI)举例
.htaccess文件的另一个常见用途是允许一个特定的目录使用服务器端包含(SSI),可以在需要的目录中放置.htaccess文件,并作如下配置:
Options +Includes
AddType text/html shtml
AddHandler server-parsed shtml

注意,必须同时设置 AllowOverride OptionsAllowOverride FileInfo 以使这些指令生效。
更详细的有关服务器端包含的说明,请参见SSI指南
CGI举例
可以通过.htaccess文件允许在特定的目录中执行CGI程序,需要作如下配置:
Options +ExecCGI
AddHandler cgi-script cgi pl

另外,如下配置可以使给定目录下的所有文件被视为CGI程序:
Options +ExecCGI
SetHandler cgi-script

注意,必须同时设置 AllowOverride OptionsAllowOverride FileInfo 以使这些指令生效。
更详细的有关CGI编程和配置的说明,请参见CGI指南
疑难解答
如果在.htaccess文件中的某些指令不起作用,可能有多种原因。
最常见的原因是AllowOverride指令没有被正确设置,必须确保没有对此文件区域设置 AllowOverride None 。有一个很好的测试方法,就是在.htaccess文件随便增加点无意义的垃圾内容,如果服务器没有返回了一个错误消息,那么几乎可以断定设置了 AllowOverride None
在访问文档时,如果收到服务器的出错消息,应该检查Apache的错误日志,可以知道.htaccess文件中哪些指令是不允许使用的,也可能会发现需要纠正的语法错误。
顶端 Posted: 2006-11-03 00:16 | [楼 主]
HarbinBeer
级别: 管理员


精华: 1
发帖: 1278
活跃度: 2005 点
金钱: 10861 RMB
贡献: 0 点
注册时间:2006-10-10
最后登录:2008-11-21

 防止盗链

基本
RewriteEngine on
RewriteCond % !^$
RewriteCond % !^http://(www\.)?mydomain.com/.*$ [NC]
RewriteRule \.(gif|jpg)$ - [G,L]
ErrorDocument  410  http://www.8-host.net/

有替代图片
RewriteEngine on
RewriteCond % !^$
RewriteCond % !^http://(www\.)?mydomain.com/.*$ [NC]
RewriteRule \.(gif|jpg)$ http://www.mydomain.com/替代图片文件名 [R,L]

允许多个站点调用

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www.domain1.com|www.domain2.com) [NC]
RewriteRule \.(jpg|gif|bmp|png)$ - [G,L]
ErrorDocument  410  http://www.8-host.net/

匹配泛域
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(.*\.8-host\.net/|8-host\.net/) [NC]
RewriteRule \.(jpg|gif|bmp|png|css|js|exe|msi|bat|zip|rar)$ - [G,L]
ErrorDocument  410  http://www.8-host.net/
顶端 Posted: 2006-11-03 00:21 | 1 楼
jmpxwh
级别: 新手上路


精华: 0
发帖: 4
活跃度: 5 点
金钱: 40 RMB
贡献: 0 点
注册时间:2007-08-02
最后登录:2007-08-02

 

哈哈,写的真够详细的,不错,以后自己也配置一个.htaccess
顶端 Posted: 2007-08-02 19:58 | 2 楼
zilo916
级别: 新手上路


精华: 0
发帖: 14
活跃度: 15 点
金钱: 140 RMB
贡献: 0 点
注册时间:2007-12-01
最后登录:2008-11-08

 

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://你的域名/.*$      [NC]
RewriteCond %{HTTP_REFERER} !^http://你的域名$      [NC]
RewriteRule .*/.(jpg|jpeg|gif|png|bmp|rar|zip|exe)$ 盗链后转向的地址 [R,NC]


修改一下上面的代码,然后保存为.htaccess,并且上传到你空间上面要保护的目录下就可以了。
顶端 Posted: 2008-03-28 20:33 | 3 楼
HarbinBeer
级别: 管理员


精华: 1
发帖: 1278
活跃度: 2005 点
金钱: 10861 RMB
贡献: 0 点
注册时间:2006-10-10
最后登录:2008-11-21

 选择性地禁止搜索引擎

RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} .bot.*|.slurp.*|.spider.*|.crawler.*|.transcoder.*|.player.* [NC] #搜索引擎Agent特征
RewriteCond %{HTTP_USER_AGENT} !.google.*|.baidu.*|.yahoo.* [NC] #允许的搜索引擎
RewriteRule ^.* - [G,L]
ErrorDocument  410  http://www.8-host.net/
顶端 Posted: 2008-04-08 14:24 | 4 楼
万事无忧
级别: 新手上路


精华: 0
发帖: 2
活跃度: 2 点
金钱: 120 RMB
贡献: 0 点
注册时间:2007-02-27
最后登录:2008-04-09

 Re:选择性地禁止搜索引擎

Quote:
引用第5楼HarbinBeer于2008-04-08 14:24发表的 选择性地禁止搜索引擎 :
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} .bot.*|.slurp.*|.spider.* [NC] #搜索引擎Agent特征
RewriteCond %{HTTP_USER_AGENT} !.google.*|.baidu.*|.yahoo.* [NC] #允许的搜索引擎
RewriteRule ^.* - [G,L]

顶端 Posted: 2008-04-10 15:49 | 5 楼
HarbinBeer
级别: 管理员


精华: 1
发帖: 1278
活跃度: 2005 点
金钱: 10861 RMB
贡献: 0 点
注册时间:2006-10-10
最后登录:2008-11-21

 规范化主机名

RewriteEngine on
RewriteCond %{HTTP_HOST} !^www.8-host.net [NC]
RewriteCond %{HTTP_HOST} !^$
RewriteRule ^(.*)$ http://www.8-host.net/$1 [R=301,L]
顶端 Posted: 2008-04-11 16:13 | 6 楼
HarbinBeer
级别: 管理员


精华: 1
发帖: 1278
活跃度: 2005 点
金钱: 10861 RMB
贡献: 0 点
注册时间:2006-10-10
最后登录:2008-11-21

 屏蔽非法IP

RewriteEngine on
RewriteCond %{REMOTE_ADDR} ^(10|192|172)[.].*
RewriteRule ^.* - [G,L]
ErrorDocument  410  http://www.8-host.net/
顶端 Posted: 2008-04-11 16:58 | 7 楼
HarbinBeer
级别: 管理员


精华: 1
发帖: 1278
活跃度: 2005 点
金钱: 10861 RMB
贡献: 0 点
注册时间:2006-10-10
最后登录:2008-11-21

 禁止某些文件下载

RewriteEngine on
RewriteRule \.(sql|zip|rar)$ - [NC,G,L]
ErrorDocument  410  http://www.8-host.net/
顶端 Posted: 2008-05-04 21:57 | 8 楼
fzw
级别: 新手上路


精华: 0
发帖: 2
活跃度: 3 点
金钱: 20 RMB
贡献: 0 点
注册时间:2007-11-07
最后登录:2008-09-08

 

我来提供一个设置cookie防盗链的方法

RewriteEngine on
RewriteCond %{HTTP_COOKIE} !.*undown=1.* [NC,OR]
RewriteCond %{HTTP_REFERER} !^.*(8-host.net|[url]www.8-host.net/[/url]).*$ [NC]
RewriteRule .*.(jpeg|png|bmp|rar|zip|exe|txt|w3x|w3m|jpg)$ http://www.8-host.net/logo.gif [R,NC]

然后在首页或者下载前页面用php或者js设置cookie即可
比如php:setcookie("undown", 1);
能防迅雷  还可以和REFERER结合起来用
顶端 Posted: 2008-05-05 13:32 | 9 楼
« 1 2» Pages: ( 1/2 total )
帖子浏览记录 版块浏览记录
捌号主机论坛 » 技术交流

Time now is:11-21 09:02, Gzip disabled 京ICP备06061602号
Powered by PHPWind v6.3.2 Certificate Code © 2003-08 PHPWind.com Corporation