.htaccess设置 1 -笔记

这是偶自己笔记.
主要给偶自己看,不用到处找了
大部分其中内容参考Apache2.2中文文档

.htaccess文件是Apache分布式配置文件,允许对任何目录及其子目录覆盖Apache httpd.conf配置文件设置.

Apache配置文件 httpd.conf 的Directory段AllowOverride设置决定.htaccess能否,以及在多大范围内生效 :

AuthConfig
允许使用与认证授权相关的指令(AuthDBMGroupFile, AuthDBMUserFile, AuthGroupFile, AuthName, AuthType, AuthUserFile, Require, 等)。

FileInfo
允许使用控制文档类型的指令(DefaultType, ErrorDocument, ForceType, LanguagePriority, SetHandler, SetInputFilter, SetOutputFilter, mod_mime中的 Add* 和 Remove* 指令等等)、控制文档元数据的指令(Header, RequestHeader, SetEnvIf, SetEnvIfNoCase, BrowserMatch, CookieExpires, CookieDomain, CookieStyle, CookieTracking, CookieName)、mod_rewrite中的指令(RewriteEngine, RewriteOptions, RewriteBase, RewriteCond, RewriteRule)和mod_actions中的Action指令。

Indexes
允许使用控制目录索引的指令(AddDescription, AddIcon, AddIconByEncoding, AddIconByType, DefaultIcon, DirectoryIndex, FancyIndexing, HeaderName, IndexIgnore, IndexOptions, ReadmeName, 等)。

Limit
允许使用控制主机访问的指令(Allow, Deny, Order)。

Options[=Option,…]
允许使用控制指定目录功能的指令(Options和XBitHack)。可以在等号后面附加一个逗号分隔的(无空格的)Options选项列表,用来控制允许Options指令使用哪些选项。

Note:

1.使用.htaccess将加重服务器负担.

2.这个文件必须为ASCII格式.换行符需要与使用操作系统匹配(在类Unix系统,为 \n ),因此如果通过FTP上传到远程虚拟主机,请使用ASCII模式自动进行可能的换行符转换.

3. 以” . “开头的文件在Linux下属于特殊文件,一般不会出现在FTP的LIST 命令返回文件列表中.虽然事实上仍可以通过FTP访问 .在 Shell下,可以用 “ls -a ” 显示此类文件.

4..htaccess是基于目录的设置,可以被 上级/下级 目录 覆盖或继承

5.如果.htaccess设置错误或使用了未被允许的设置内容,将导致503错误

6..htaccess文件需要644或以上的权限

7.每行 # 号以后内容被认为是注释 (正如其它Linux下的配置文件一样)

8..htaccess中的关键字对大小写不敏感

9..htaccess文件中连续的多个空格将被忽略 (正象其他Linux配置文件一样)

如果允许,.htaccess几乎可以对任何httpd.conf中配置进行修改,
功能非常强大.
这里举一些例子.

1. 设置默认文档

语法:
DirectoryIndex index.php

可以设置多个,按先后顺序
DirectoryIndex index.htm index.php

可以使用当前域名DocumentRoot下的绝对路径:
DirectoryIndex /index/index.php

2.设置错误文档

对不同的http错误状态吗,返回特定文档.
Http状态码在 RFC 2616 文档的第十部分被定义

语法:

使用当前域名目录下的绝对路径: (相对与 Document Root)
ErrorDocument 400 /errors/badrequest.html

使用相对当前目录的相对路径:
ErrorDocument 400 error.html
(注意,这样配置将在被子目录继承时出现Additional 404 Not Found错误,不推荐)

使用绝对URL:
ErrorDocument 400 http://www.abc.com/
(警告:如果使用这种URL形式,那么当出现400错误时服务器实际上会返回 302 转向和 一个Location: http://www.abc.com/ ,在某些情况下这将导致严重后果
强烈不推荐此种方式!)

或者:
ErrorDocument 403 “Sorry can’t allow you access today”
直接输出简单消息 (Apache有时会附加一些信息上去)

使用:
ErrorDocument 404 default
返回Apache内置的硬编码错误信息.

注意: 如果返回的错误文档小于512byte,微软IE浏览器将忽略它们而用自己”友好的”错误信息进行取代,除非在IE选项-高级 中取消 “使用友好错误信息”复选框.
(垃圾微软的自作多情,错误文档本来就应该很小,一个错误信息和指向首页链接足够了,谁有空看这个,汗)

3.密码保护文件夹
由Apache mod_auth_basic模块提供支持

浏览器访问时返回401 Authorization Required,要求输入用户名和密码
需要配合 .htpasswd 文件

根据服务器情况,代码不同
典型的和通用的一种代码形式是:

.htaccess文件内容为:

AuthType Basic
AuthUserFile /home/cxy152376stu/test.sakura-paris.org/cc/a/.htpasswd
AuthName “Members Area”
require valid-user

Note:
1. 其中 .htpasswd必须使用绝对路径
2.AuthName 后内容为浏览器弹出的要求输入密码对话框标题

.htpasswd文件内容

test:RhYk4AG23WZ8I
test2:gmQP.6Or8sTgc

Note:
1.每行一个用户名和密码,以 : 分割字段
2.密码为单向加密,通常使用Apache的htpasswd工具生成,这个网页可以尝试在线生成密码的密文

这是一种简单的和不安全的认证方式,用户名和密码是明文传输的.

4.目录浏览权限

在没有默认文档时,是否以及如何显示文件和文件夹列表.由mod_autoindex模块提供.

首先控制是否显示文件列表.

不显示:

options -indexes

(此时直接访问目录403 Forbidden)

显示:

options +indexes

 
Apache默认显示文件列表.
可以进一步控制文件列表显示模式:
这里有许多配置
 

HeaderName HEADER.html

在返回的文件列表信息顶部插入的Html文件.可以使用绝对或相对路径.不过仍然建议使用绝对路径,因为相对路径无法被子目录继承..
指定的文件在Apache里设定的MIME类型必须为 text/*
默认的文件是header.html
 

IndexIgnore *.jpg *.ico .htaccess php.ini

在返回文件列表中屏蔽特定文件.如果设置为 IndexIgnore * ,那么实际上返回一个空文件
 
 

IndexOrderDefault Ascending|Descending Name|Date|Size|Description

文件列表排序方式
 

ReadmeName /avc.htm

附加在文件列表尾部的HTML文件.用法同 HeaderName Filename的语法
默认的文件是当前目录下 footer.html
 

IndexOptions [+|-]option [[+|-]option]

有非常多配置,影响了目录列表各种显示方式.部分Options:
 
FancyIndexing 一种比较友好显示方式,只有打开此项才能使用下面的 AddIconType 配置.
FoldersFirst 顾名思义
NameWidth=25 指定列表中 文件名列最大宽度(字符),多余的字符显示为 …
DescriptionWidth=128 同上.
还有一堆乱七八糟东西,没用,谁有空在这上面耗精力?
 
 

AddDescription “This is a html file” abc.html

为文件添加描述.将显示在文件列表 description项下
 

AddIconByType (IMG,/icons/image.xbm) image/*
# AddIconByType /icons/image.xbm image/*

为在文件列表中某种MIME类型文件前添加图标
在第一种方式里, IMG 是 鼠标悬停在图标上时显示的 说明(Title)
 
另外,有这个设置:
DefaultIcon /icon/unknown.xbm
设置文件默认图标(没有通过 AddIconType设置的)

Note:
通常的header.html 和 footer.html格式:

header.html


…..


 
footer.html

……

 
即把文件列表嵌套.在 表格里

5.主机访问权限控制
此项要求AllowOverride 包含 Limit .由mod_authz_host模块提供.

Order 语法: (控制默认的访问状态与Allow和Deny指令生效的顺序)

Order Deny,Allow #Deny指令在Allow指令之前被评估。默认允许所有访问
Order Allow,Deny #Allow指令在Deny指令之前被评估。默认拒绝所有访问

Note:
关键字只能用逗号分隔;它们之间不能有空格。在所有情况下每个Allow和Deny指令语句都将被评估。

Allow 控制哪些主机能够访问服务器的该区域.可以根据主机名、IP地址、 IP地址范围或其他环境变量中捕获的客户端请求特性进行控制.
语法: Allow from all|host|env=env-variable [host|env=env-variable] …

例子:
Allow from all 允许所有主机访问

Allow from apache.org
Allow from .net example.edu 要求Http请求主机名或其末尾与之匹配

Allow from 10.1.2.3
Allow from 192.168.1.104 192.168.1.205 #一个D段
Allow from 10.1
Allow from 10 172.20 192.168.2 允许IP/IP段

Allow from 10.1.0.0/255.255.0.0 同时配置子网

Allow from env=env-variable 根据环境变量提供对 User-Agent(浏览器类型)、Referer或其他HTTP请求头字段等的更广泛控制.
可以用 SetEnvIf User-Agent ^KnockKnock/2\.0 env-variable 控制环境变量设置 (以后偶再研究)

Deny
与 allow语法完全相同

Allow和Deny是从上往下读取的,上层规则有较高优先级.

6. Options

Options [+|-]option [[+|-]option]
默认值为 options All

选项:
ExecCGI 允许 mod_cgi脚本
FollowSymLinks 允许符号链接
IncludesNOEXEC 服务器端包含,不太懂.

Note:
只用 options option 语法也可以.
但涉及 权限继承覆盖时应该明确使用 options +option 和options -option

7.文档类型

0 Responses to “.htaccess设置 1 -笔记”


Comments are currently closed.