Apache服务器中的.htaccess文件(又称“分布式配置文件”)是一种强大的目录级配置工具,允许用户在特定文档目录中通过包含一个或多个指令的文件,实现对当前目录及其所有子目录的配置管理。该文件的指令权限受限于服务器管理员通过AllowOverride指令的设置,其核心优势在于无需修改主配置文件即可实现灵活的局部调整,特别适用于虚拟主机环境或需要独立配置的场景。
子目录中的.htaccess指令具有优先级,会覆盖上级目录或主服务器配置文件中的相同指令,确保目录级配置的独立性。文件上传时需以ASCII模式传输,建议权限设置为644(仅所有者可读写,其他用户仅读),以避免权限异常导致的配置失效。
错误文档定位是.htaccess的重要功能,通过自定义错误提示页面提升用户体验。常见的HTTP错误代码可分为客户端错误(4xx)与服务器错误(5xx):
- 客户端错误:包括401(未授权)、403(禁止访问)、404(未找到)、405(方法不允许)、408(请求超时)、411(缺少内容长度)、412(预处理失败)、413(请求实体过大)、414(URI过长)、415(不支持媒体类型)等;
- 服务器错误:以500(内部服务器错误)为代表。
配置时需预先准备错误页面(如置于/errors目录),通过`ErrorDocument 错误代码 /目录名/文件名.扩展名`指令关联。例如:
```apache
ErrorDocument 404 /errors/notfound.html
ErrorDocument 500 /errors/internalerror.html
```
对于简短提示,可直接在指令中使用HTML文本,如`ErrorDocument 401 "您无权访问此页面,请放弃!"`。
为目录设置访问密码需结合.htpasswd文件存储加密用户凭据。例如,通过工具生成加密密码后,创建.htpasswd文件(内容如`zheng:y4E7Ep8e7EYV`),并存放于Web根目录外以增强安全性。在.htaccess中配置如下指令:
```apache
AuthUserFile /完整路径/.htpasswd
AuthGroupFile /dev/null
AuthName "请输入访问密码"
AuthType Basic
require valid-user
```
其中,`require valid-user`允许.htpasswd中所有用户访问,或指定`require user 用户名`限制特定用户。
通过IP或域名限制访问可实现安全管控。例如拒绝某IP(`deny from 210.10.56.32`)、IP段(`deny from 219.5.45.`,表示219.5.45.0-255)或所有访问(`deny from all`),完整配置为:
```apache
Order allow,deny
deny from 指定IP或域名
allow from all
```
注意`Order`指令控制访问顺序,`allow,deny`表示先允许后拒绝。
为防止.htaccess中的敏感信息(如密码路径)泄露,可将其设置为禁止外部访问:
```apache
Order allow,deny
deny from all
```
结合文件权限(如600)可进一步提升安全性。
URL转向:适用于网站重构或文件迁移,可通过`Redirect 旧路径 新路径`实现单文件或目录重定向,如`Redirect /old/index.html https://newsite.com/new/`。
默认首页:通过`DirectoryIndex`指定默认文档,支持多文件优先级,例如:
```apache
DirectoryIndex pmwiki.php index.html default.htm
```
当访问目录时,按优先级依次查找上述文件。
为避免图片、文档等资源被恶意盗链,可基于Referer头进行过滤:
```apache
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?mydomain.com/.$ [NC]
RewriteRule \.(gif|jpg)$ - [F]
```
其中`[F]`表示禁止访问,若需替换为提示图片,可将最后一行改为`RewriteRule \.(gif|jpg)$ http://www.mydomain.com/replace.jpg [R,L]`。