Apache Web 服务器 .htaccess 配置命令

📋 目录

  1. .htaccess 是什么,如何工作
  2. 文件位置与权限设置
  3. URL 重定向 — 301 与 302
  4. 使用 mod_rewrite 重写 URL
  5. 禁止目录浏览
  6. 自定义错误页面
  7. 强制使用 HTTPS
  8. 图片防盗链保护
  9. 浏览器缓存设置
  10. 基础安全配置
  11. 故障排查
  12. 常见问题解答

.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 证书。

防盗链是指阻止其他网站直接调用您服务器上的图片,避免带宽被无效消耗。

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. 故障排查

⚠️ 保存后出现 500 错误

如果保存 .htaccess 后网站立即显示 500 Internal Server Error,说明文件中存在语法错误。请仔细检查每一行 — 注释符号(#)位置错误或缺少空格都可能导致问题。

问题可能原因解决方法
重定向不生效缺少 RewriteEngine On在 RewriteRule 前添加 RewriteEngine On
重定向循环未检查 HTTPS 条件添加 RewriteCond 检查 %{HTTPS}
所有 URL 返回 404RewriteBase 设置错误将 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 管理和安全加固到性能优化,它是专业网站管理不可缺少的利器。

每个网站建议的基础配置:

完整支持 .htaccess 的虚拟主机

AsiaGB 虚拟主机运行 Apache + DirectAdmin,完整支持 mod_rewrite。SSD 存储,99% 正常运行时间保障,月租仅需 500 泰铢起。

查看主机方案