根本原因是请求未进入.htaccess,因mod_rewrite未启用或allowoverride未设为all且路径不匹配;须三步解决:启用rewrite模块、在精准directory块中配置allowoverride all和require all granted、重载配置并验证规则落地。

伪静态路由在 Apache 中不生效,根本原因往往不是规则写错了,而是请求压根没走到 .htaccess 文件——AllowOverride 没开对,或者 mod_rewrite 模块根本没启用。解决它要分三步走:确认模块已加载、确保目录权限放行、验证规则正确落地。
检查并启用 mod_rewrite 模块
Apache 必须先加载重写模块,后续所有规则才可能执行。
- 终端执行:
apachectl -M | grep rewrite,若输出含rewrite_module (shared)表示已启用;无输出则未启用 - Ubuntu/Debian 系统运行:
sudo a2enmod rewrite && sudo systemctl reload apache2 - CentOS/RHEL 系统打开
/etc/httpd/conf/httpd.conf,取消注释这一行:LoadModule rewrite_module modules/mod_rewrite.so,再执行sudo systemctl reload httpd
精准配置 Directory 块与 AllowOverride
AllowOverride 不是全局开关,只在匹配的 <directory></directory> 块内生效,且路径必须和网站实际根目录完全一致。
PyCharm 2026.2.0.1 Linux版提供 JetBrains 官方 2026.2.0.1 版本安装包,适合需要指定 PyCharm 版本进行 Python 项目开发、运行和调试的用户。
- 进宝塔 → 网站 → 对应站点 → 配置文件,找到类似
<directory></directory>的区块(用ls -l /www/wwwroot/确认真实路径) - 该区块内必须包含两行:
AllowOverride AllRequire all granted - 删掉旧的
Order allow,deny和Allow from all(Apache 2.4+ 已废弃) - 改完不能只点“保存”,必须点击面板右上角「重载配置」,或 SSH 执行
sudo systemctl reload apache2
验证 .htaccess 规则是否被读取
规则写得再标准,如果 Apache 跳过 .htaccess,就等于没写。
-
.htaccess必须放在网站 DocumentRoot 目录下(通常是/www/wwwroot/your-domain.com),不是子目录也不是public下(ThinkPHP 除外,需按框架要求放) - 文件权限设为
644,内容以RewriteEngine On开头,例如最简可用规则:
<ifmodule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1]
</ifmodule>
- 注意:
index.php要确保存在且可访问;FastCGI 模式下避免用index.php/$1,否则易报 “No input file specified” - 修改后用
curl -I http://your-domain.com/abc测试是否返回 200 或 302,而非 404
配合框架确认路由开启状态
服务器端配置只是基础,框架自身也要配合。
- ThinkPHP/FastAdmin 等需在应用配置中开启路由(如
'url_route_on' => true) - 检查入口文件是否为
index.php,且 URL 中不显式带index.php?s=(伪静态成功后应直接访问/admin这类路径) - 若用宝塔,「网站 → 设置 → 伪静态」里选对模板(如 ThinkPHP6),再保存并重载









