Apache .htaccess配置:入门掌握伪静态与访问控制

Apache 的 .htaccess 是一个放在网站目录下的纯文本配置文件,用来在不修改主配置文件 httpd.conf 的前提下,对当前目录及其子目录做伪静态、301 跳转、访问限制等设置。
很多零基础用户第一次改 .htaccess 就遇到 500 错误,根本原因通常是服务器没有开启 AllowOverride 权限,或者写入了 Apache 不认识的指令。

下面按“先确认能不能用,再写规则,最后验证”的顺序讲清楚,每一步都给出可直接复制的配置和检查方法。

先确认服务器允许 .htaccess 生效

.htaccess 不是放上去就生效的,Apache 默认可能忽略它。
你需要先检查虚拟主机配置里对应目录的 AllowOverride 值。

在宝塔面板中,打开“网站” → 找到对应站点 → “设置” → “配置文件”,找到类似下面的段落:


    Options FollowSymLinks
    AllowOverride None
    Require all granted

把 AllowOverride None 改成 AllowOverride All,保存后重载 Apache。
命令行下可以执行:

apachectl configtest
systemctl reload httpd   # CentOS
systemctl reload apache2 # Debian/Ubuntu

configtest 返回 Syntax OK 才说明主配置没问题。
如果这里报错,先修主配置,不要继续改 .htaccess。

同时确认 mod_rewrite 模块已启用,伪静态规则依赖它:

httpd -M | grep rewrite   # CentOS
apache2ctl -M | grep rewrite # Debian/Ubuntu

输出里出现 rewrite_module 才算启用。
宝塔用户一般在“软件商店” → Apache 设置里可以直接勾选。

常用配置片段与写法

.htaccess 文件本身没有扩展名,文件名就是 .htaccess,放在网站根目录。
用记事本或面板文件管理器新建时注意不要变成 htaccess.txt。

开启伪静态(以 WordPress 为例)


    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]

RewriteCond %{REQUEST_FILENAME} !
-f
表示请求的文件不存在时才走重写,避免把真实存在的图片、CSS 也转发给 PHP。

整站 301 跳转(换域名时用)

RewriteEngine On
RewriteCond %{HTTP_HOST} ^old.com [NC]
RewriteRule ^(.*)$ https://new.com/$1 [R=301,L]

[R=301,L] 表示返回 301 永久跳转并停止后续规则。
改完后用浏览器访问旧域名,按 F12 看 Network 里状态码是否为 301。

给目录加密码保护

AuthType Basic
AuthName "Restricted"
AuthUserFile /www/wwwroot/你的域名/.htpasswd
Require valid-user

密码文件用命令生成:

htpasswd -c /www/wwwroot/你的域名/.htpasswd admin

系统会提示输入两次密码。-c 只在第一次创建文件时用,后续加用户要去掉 -c,否则会覆盖已有用户。

容易踩坑的地方

500 Internal Server Error 是最常见的报错,九成以上是语法问题或权限问题。
排查顺序:先注释掉刚加的行,看是否恢复;
再用 apachectl configtest 检查主配置;
最后看 Apache 错误日志,路径通常在 /www/wwwlogs/你的域名-error_log 或 /var/log/httpd/error_log。

不要在主配置文件里已经写过的规则又重复写进 .htaccess。
两者叠加会导致重写循环,表现为页面打不开或跳转次数过多。

修改前先备份原文件。
面板文件管理器里可以右键复制一份 .htaccess.bak,出问题能立刻还原。

权限不要设成 777。
.htaccess 一般用 644,所属用户和组与网站目录一致即可。
权限过松反而可能被安全策略拒绝。

改完怎么验证

配置保存后,不需要重启 Apache,.htaccess 是每次请求时读取的(除非服务器做了缓存)。
验证三件事:

  1. 打开网站首页和一篇内页,确认能正常访问,没有 500 或 404。
  2. 用 curl -I https://你的域名/旧地址 查看返回头,确认 301 跳转的目标地址正确。
  3. 查看错误日志,确认没有新的 AH 开头报错。

如果伪静态不生效,先确认 AllowOverride All 已生效,再确认 mod_rewrite 已加载,最后检查 RewriteBase 是否与实际目录匹配。

常见疑问

.htaccess 修改后需要重启 Apache 吗?
一般不需要,Apache 会在每次请求时读取。但如果改了主配置文件里的 AllowOverride,就必须重载 Apache 才生效。

为什么规则在本地测试正常,上传到服务器就 500?
本地环境可能默认允许所有指令,而线上服务器 AllowOverride 为 None 或没装对应模块。先在服务器上执行 configtest 和模块检查,不要直接怀疑规则本身。

一个网站可以有多个 .htaccess 吗?
可以。每个目录都可以放一个,子目录的规则会继承并覆盖父目录。但规则越多越难维护,建议只在根目录保留必要配置。

伪静态和 301 跳转能写在同一个文件里吗?
能,但要注意顺序。Apache 按从上到下执行,[L] 表示匹配后停止。把具体规则放在前面,通用规则放在后面,避免被提前拦截。

分享到:
上一篇
Apache安装配置教程:从零完成部署与虚拟主机设置
下一篇
Tomcat性能优化:从JVM到连接器的调优指南
1
系统公告

泽御云中秋国庆双节活动上线:新购8折,拼团3.99元起

尊敬的用户:
泽御云“月满中秋·礼贺国庆”双节活动现已开启,活动时间为2026年9月23日至10月10日。 活动期间可享以下福利:
1. 常规云服务器新购使用优惠码“泽御中秋国庆同乐”,符合条件的订单享8折优惠。
2. 香港精品云服务器5人拼团低至3.99元,部分4核4G套餐3人拼团年付388元,续费同价。
3. 新用户购买年付云服务器,符合活动规则可赠送2个月使用时长。
4. 老用户续费季度赠15天,续费年度赠2个月;活动期间升级配置免收配置迁移手续费。
5. 推荐好友成功下单,符合条件的推荐人可获赠7天服务器使用时长。
6. 活动期间享宕机补偿标准翻倍、简单网站迁移协助及技术工单优先处理权益。
温馨提示:优惠码不适用于拼团套餐、活动轻量产品、年付订单及续费订单;拼团套餐为独立特价活动,不与赠时类福利叠加。赠送时长不可折现、退款或跨账户转移,具体规则以活动页面说明为准。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意