📋 目录
.htaccess 文件是虚拟主机用户最应该掌握的工具之一。无论是 URL 重定向、提升安全性、强制 HTTPS 还是优化网站性能,都可以通过这个文件完成。本指南汇集了最常用的命令,并提供可直接复制使用的代码示例。
1. .htaccess 是什么,如何工作
.htaccess(超文本访问)是 Apache Web 服务器的配置文件,可在目录级别控制服务器行为,无需修改主配置文件 httpd.conf。文件名以点(.)开头,在大多数操作系统中为隐藏文件。
当 Apache 收到请求时,会从根目录到目标目录逐层读取 .htaccess 文件并应用所有规则。最大优势在于:修改后立即生效,无需重启服务器。
.htaccess 主要功能
| 功能 | 常见用途 |
|---|---|
| URL 重定向 | 旧域名 → 新域名,301/302 跳转 |
| URL 重写 | 美化 URL:/product?id=5 → /product/5 |
| 目录浏览控制 | 防止访客查看目录文件列表 |
| 自定义错误页 | 品牌化的 404、500 错误页面 |
| 强制 HTTPS | 自动将 HTTP 重定向到 HTTPS |
| 防盗链保护 | 阻止外站直接调用您的图片 |
| 浏览器缓存 | 通过缓存头提升页面加载速度 |
| 安全配置 | 阻止文件访问,添加安全响应头 |
AsiaGB 虚拟主机使用 Apache,已默认启用 mod_rewrite。您无需任何额外设置即可使用 .htaccess 的全部功能。
2. 文件位置与权限设置
将 .htaccess 文件放在需要控制的目录中。要影响整个网站,请放在网站根目录:
/home/username/
└── public_html/
├── .htaccess ← 影响整个网站
├── index.php
└── admin/
└── .htaccess ← 仅影响 /admin/ 目录
正确权限:644(所有者可读写,其他人只读)。切勿设置为 777,这是安全漏洞。
可通过 DirectAdmin → 文件管理器(启用显示隐藏文件)创建或编辑,也可通过 FTP(FileZilla 等工具)上传。
3. URL 重定向 — 301 与 302
重定向是 .htaccess 最常用的功能,在更换域名、调整 URL 结构或迁移内容时必不可少。
301 永久重定向
# 重定向单个页面
Redirect 301 /old-page.html https://example.com/new-page.html
# 将旧域名完整重定向到新域名
RewriteEngine On
RewriteCond %{HTTP_HOST} ^oldsite\.com$ [NC]
RewriteRule ^(.*)$ https://newsite.com/$1 [L,R=301]
302 临时重定向
Redirect 302 /promo.html https://example.com/sale.html
只在永久性迁移时使用 301。浏览器和 Google 会长期缓存 301 重定向,一旦设置后很难撤回,即使删除了规则也需要数周才能生效。
强制添加/去除 www
# 强制使用 www
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [L,R=301]
# 强制去除 www
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [L,R=301]
4. 使用 mod_rewrite 重写 URL
URL 重写将动态 URL 转换为简洁、可读的形式,有助于 SEO 和用户体验。
启用 mod_rewrite
RewriteEngine On RewriteBase /
示例:WordPress 固定链接支持
# BEGIN WordPress
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress
示例:去除 URL 中的 .php 扩展名
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^([^/]+)/?$ $1.php [L]
示例:将查询字符串转为美化 URL
# /product?id=5 → /product/5 RewriteEngine On RewriteRule ^product/([0-9]+)/?$ product.php?id=$1 [L,QSA]
| 标志 | 含义 |
|---|---|
| [L] | Last — 停止处理后续规则 |
| [R=301] | 重定向并返回指定状态码 |
| [NC] | No Case — 不区分大小写匹配 |
| [QSA] | 保留原有查询字符串 |
| [NE] | 不对特殊字符进行转义 |
5. 禁止目录浏览
默认情况下,当目录没有索引文件时,Apache 可能会列出所有文件,暴露网站结构,存在安全风险。
# 禁止目录浏览 Options -Indexes
始终在根目录的 .htaccess 中添加 Options -Indexes,这是最简单也最有效的安全措施之一。
6. 自定义错误页面
使用自定义错误页面替代服务器默认的错误页面,提升用户体验并保持品牌一致性。
ErrorDocument 400 /errors/400.html ErrorDocument 401 /errors/401.html ErrorDocument 403 /errors/403.html ErrorDocument 404 /errors/404.html ErrorDocument 500 /errors/500.html
| 错误代码 | 含义 | 常见原因 |
|---|---|---|
| 400 | 错误请求 | 请求格式有误 |
| 403 | 访问被拒绝 | 没有访问权限 |
| 404 | 页面不存在 | URL 错误或页面已删除 |
| 500 | 服务器内部错误 | 代码或配置错误 |
| 503 | 服务不可用 | 服务器临时过载 |
7. 强制使用 HTTPS
强制 HTTPS 是现代网站的标准做法,有助于安全性、用户信任度和 SEO 排名。
# 标准服务器(无负载均衡)
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# 位于负载均衡器或反向代理后面(如 Cloudflare)
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
强制 HTTPS 前必须先安装 SSL 证书。AsiaGB 主机用户可直接通过 DirectAdmin 申请免费的 Let's Encrypt 证书。
8. 图片防盗链保护
防盗链是指阻止其他网站直接调用您服务器上的图片,避免带宽被无效消耗。
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https?://(www\.)?yourdomain\.com [NC]
RewriteRule \.(jpg|jpeg|png|gif|webp|svg)$ - [F,L]
将 yourdomain.com 替换为您自己的域名。当外站尝试直接嵌入您的图片时,将返回 403 Forbidden。
9. 浏览器缓存设置
浏览器缓存让访客的浏览器在本地存储静态文件,大幅提升回访时的页面加载速度,直接影响 Core Web Vitals 指标。
<IfModule mod_expires.c>
ExpiresActive On
# 图片 — 缓存1年
ExpiresByType image/jpg "access plus 1 year"
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType image/webp "access plus 1 year"
ExpiresByType image/gif "access plus 1 year"
ExpiresByType image/svg+xml "access plus 1 year"
ExpiresByType image/x-icon "access plus 1 year"
# CSS 和 JS — 缓存1个月
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/javascript "access plus 1 month"
# 字体 — 缓存1年
ExpiresByType font/woff2 "access plus 1 year"
ExpiresByType application/font-woff2 "access plus 1 year"
# HTML — 短缓存(便于快速更新)
ExpiresByType text/html "access plus 1 hour"
</IfModule>
<IfModule mod_headers.c>
<FilesMatch "\.(jpg|jpeg|png|webp|gif|ico|css|js|woff|woff2)$">
Header set Cache-Control "public, max-age=31536000"
</FilesMatch>
</IfModule>
10. 基础安全配置
以下安全指令适用于所有网站,建议作为基础配置添加到 .htaccess 中。
隐藏服务器信息
ServerSignature Off <IfModule mod_headers.c> Header unset X-Powered-By Header always unset X-Powered-By </IfModule>
添加安全响应头
<IfModule mod_headers.c> # 防止点击劫持 Header always set X-Frame-Options "SAMEORIGIN" # 防止 XSS 攻击 Header always set X-XSS-Protection "1; mode=block" # 防止 MIME 类型嗅探 Header always set X-Content-Type-Options "nosniff" # HTTPS 严格传输安全 Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains" # 引用来源策略 Header always set Referrer-Policy "strict-origin-when-cross-origin" </IfModule>
保护敏感文件
# 保护 .htaccess 和 .htpasswd 文件 <FilesMatch "^\.ht"> Require all denied </FilesMatch> # 阻止访问备份文件 <FilesMatch "\.(bak|backup|sql|log|old|orig)$"> Require all denied </FilesMatch> # 保护 WordPress 配置文件 <Files "wp-config.php"> Require all denied </Files>
限制 HTTP 请求方法
<LimitExcept GET POST HEAD> Require all denied </LimitExcept>
11. 故障排查
如果保存 .htaccess 后网站立即显示 500 Internal Server Error,说明文件中存在语法错误。请仔细检查每一行 — 注释符号(#)位置错误或缺少空格都可能导致问题。
| 问题 | 可能原因 | 解决方法 |
|---|---|---|
| 重定向不生效 | 缺少 RewriteEngine On | 在 RewriteRule 前添加 RewriteEngine On |
| 重定向循环 | 未检查 HTTPS 条件 | 添加 RewriteCond 检查 %{HTTPS} |
| 所有 URL 返回 404 | RewriteBase 设置错误 | 将 RewriteBase 设置为实际路径 |
| 缓存不生效 | mod_expires 未加载 | 改用 mod_headers 或联系客服 |
| 安全头不出现 | mod_headers 未加载 | 检查 Apache 已加载的模块 |
12. 常见问题解答
.htaccess 是什么?能做什么?
.htaccess 是 Apache Web 服务器的配置文件,可在目录级别控制服务器行为,无需修改主配置文件。可用于 URL 重定向、URL 重写、禁止目录浏览、自定义错误页面、强制 HTTPS、防盗链、浏览器缓存和安全头配置。
.htaccess 文件应该放在哪里?
放在 public_html/ 目录以影响整个网站,或放在子目录仅控制该目录。可通过 DirectAdmin 文件管理器(启用显示隐藏文件)创建,或通过 FTP 上传。
为什么 .htaccess 不起作用?
常见原因:AllowOverride 设为 None、mod_rewrite 未启用、文件命名错误(必须是 .htaccess)、文件中有语法错误,或权限不正确(应为 644)。
301 和 302 重定向有什么区别?
301(永久移动)用于永久性 URL 变更,Google 会将链接权重传递给新 URL 并缓存该重定向。302(临时重定向)用于短期跳转,Google 仍保留原始 URL 的索引。永久迁移请使用 301。
AsiaGB DirectAdmin 主机可以使用 .htaccess 吗?
完全可以。AsiaGB 虚拟主机运行 Apache 并已默认启用 mod_rewrite,可直接通过 DirectAdmin 文件管理器或 FTP 创建和使用 .htaccess,无需任何额外配置。
.htaccess 会影响网站速度吗?
.htaccess 每次请求都会被解析,有轻微开销,但通过 .htaccess 启用浏览器缓存带来的速度提升远超这点开销。对于普通网站,.htaccess 的性能影响几乎可以忽略不计。
总结:.htaccess — 每位主机用户的必备工具
.htaccess 让您无需触碰服务器管理面板即可对 Web 服务器进行精细控制。从 URL 管理和安全加固到性能优化,它是专业网站管理不可缺少的利器。
每个网站建议的基础配置:
- 添加
Options -Indexes禁止目录浏览 - 使用 301 重定向规则强制 HTTPS
- 设置自定义 404 和 500 错误页面
- 添加安全响应头防止 XSS 和点击劫持
- 为静态资源配置浏览器缓存
完整支持 .htaccess 的虚拟主机
AsiaGB 虚拟主机运行 Apache + DirectAdmin,完整支持 mod_rewrite。SSD 存储,99% 正常运行时间保障,月租仅需 500 泰铢起。
查看主机方案