.htaccess 生成器:让 Apache 配置不再头疼
📷 Taylor Vick / Pexels.htaccess 生成器:让 Apache 配置不再头疼
.htaccess 文件是 Apache 服务器的目录级配置工具。本文讲解每个网站都需要的核心配置、常见陷阱,以及如何用生成器快速获得正确的配置文件。
.htaccess 文件可能是 Apache 服务器上最容易被误解的文件。它看上去只是一个普通的文本文件,但一个语法错误就能让整个网站显示 500 错误。另一方面,正确配置它能一次性解决 HTTPS 跳转、压缩优化和安全加固等多个问题。
想要跳过复杂语法,直接获得正确的配置文件,可以使用 htaccess-generator 工具。但理解每条指令的作用,会在出现问题时帮你快速定位原因。
.htaccess 是什么
.htaccess 是 Apache Web 服务器的目录级配置文件。文件名以点(.)开头,在 Unix/Linux 系统上默认为隐藏文件。
当 Apache 处理请求时,会依次检查目标目录及其所有父目录中的 .htaccess 文件,并应用找到的配置。这让你无需修改主服务器配置,就能为特定目录定义规则。
主要使用场景:
- 共享主机环境(无法访问主配置文件)
- HTTPS 重定向、URL 重写
- 压缩和缓存配置
- 访问限制和安全头设置
每个网站都需要的 3 个核心配置
1. 强制 HTTPS
将 HTTP 访问的用户自动跳转到 HTTPS,对安全性和 SEO 都至关重要。
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
R=301 表示永久重定向,告知搜索引擎 URL 已更改。请确保 SSL 证书已正确安装后再添加此设置,否则网站将无法访问。
2. 启用 Gzip 压缩
HTML、CSS、JavaScript 等文本文件压缩后体积可减少 60-80%,页面加载速度明显提升。
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/css
AddOutputFilterByType DEFLATE text/javascript application/javascript
AddOutputFilterByType DEFLATE application/json application/xml
</IfModule>
<IfModule> 包装确保在 mod_deflate 未安装时不报错。
3. 禁用目录列表
当目录中没有 index.html 时,Apache 默认会显示该目录的所有文件列表,这是严重的安全隐患。
Options -Indexes
一行代码即可防止目录内容泄露。生产环境必须设置。
访问 htaccess-generator 工具,勾选所需选项,即可生成上述所有配置。
常见陷阱
AllowOverride 配置问题
当 .htaccess 看似不生效时,首先检查这里。如果主 Apache 配置中有:
<Directory /var/www/html>
AllowOverride None
</Directory>
即使 .htaccess 文件存在,Apache 也会完全忽略它。需要改为:
<Directory /var/www/html>
AllowOverride All
</Directory>
这个修改需要访问主配置文件。共享主机通常默认为 All,VPS 或独立服务器则需要自行确认和设置。
同时配置 www 和 non-www 重定向的问题
将 HTTPS 重定向和 www 统一重定向写成两条独立规则,可能导致重定向循环。正确做法是用一条规则同时处理两个条件:
RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteRule ^ https://yourdomain.com%{REQUEST_URI} [R=301,L]
这样 http/https、www/non-www 的四种组合都能用一次重定向处理完毕。
在 Nginx 上使用 .htaccess
Nginx 根本不读取 .htaccess 文件。从 Apache 迁移到 Nginx 后,所有 .htaccess 规则都需要手动转换为 Nginx server 块配置。
部分 WordPress 主机底层使用 Nginx,但控制面板界面看起来和 Apache 一样,这会造成混淆。请务必确认服务器实际使用的 Web 服务器类型。
WordPress 实战配置
WordPress 固定链接功能必须依赖 .htaccess。以下是推荐的完整配置顺序:
第 1 步:在 WordPress 块上方添加 HTTPS 重定向
# 强制 HTTPS
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
第 2 步:WordPress 默认块(保存固定链接设置时自动生成)
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
第 3 步:在 WordPress 块下方添加性能和安全配置
# Gzip 压缩
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/css text/javascript application/javascript
</IfModule>
# 浏览器缓存
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/javascript "access plus 1 month"
</IfModule>
# 禁用目录列表
Options -Indexes
# 保护敏感文件
<FilesMatch "\.(env|log|ini|bak|sql|conf)$">
Order allow,deny
Deny from all
</FilesMatch>
# 保护 wp-config.php
<Files wp-config.php>
Order allow,deny
Deny from all
</Files>
使用 htaccess-generator 工具,点击几下即可生成完整配置。
.htaccess 与直接编辑 httpd.conf
如果你有服务器访问权限,从性能角度来说,将规则直接写入虚拟主机配置文件更优。Apache 每次请求都会读取 .htaccess,会产生轻微的性能开销。
| 对比项 | .htaccess | httpd.conf |
|---|---|---|
| 适用范围 | 目录级别 | 服务器全局 |
| 生效方式 | 立即生效 | 需要重启 |
| 所需权限 | 文件所有者 | root |
| 性能 | 略低 | 最优 |
共享主机用户没有选择,只能使用 .htaccess。有服务器控制权的情况下,推荐优先使用 httpd.conf。
修改后必须测试
编辑 .htaccess 后请立即验证:
- 在浏览器中打开网站,检查是否有 500 错误
- 查看 Apache 错误日志(
/var/log/apache2/error.log) - 使用
curl -I http://yourdomain.com检查重定向 - 保留修改前的备份
htaccess-generator 生成的代码经过语法验证,大幅降低因拼写错误导致 500 错误的风险。正确配置后,安全性和性能都能同时得到提升。