phpEnv中Apache默认未启用mod_rewrite,需手动取消httpd.conf中LoadModule rewrite_module行的注释,并将对应Directory段的AllowOverride None改为All、补全FollowSymLinks和Require all granted,再正确创建.htaccess文件并放置于public目录下测试。

确认 phpEnv 中 Apache 的 mod_rewrite 是否已启用
phpEnv 是 Windows 下轻量级 PHP 环境集成包,其 Apache 默认通常**未启用 mod_rewrite**。直接写 .htaccess 会完全无效,访问时可能返回 500 错误或 URL 不重写。先验证:在项目根目录放一个 info.php,内容为 <?php phpinfo(); ?>,浏览器打开后搜索 mod_rewrite —— 若没出现,说明模块未加载。
解决方法:打开 phpEnv 安装目录下的 Apache\conf\httpd.conf(路径类似 C:\phpEnv\Apache\conf\httpd.conf),找到这一行:
LoadModule rewrite_module modules/mod_rewrite.so
确保它**前面没有 #**;如果没有这行,手动添加到 LoadModule 区块末尾。保存后重启 phpEnv 的 Apache 服务。
修改 Directory 配置允许 .htaccess 生效
即使 mod_rewrite 已启用,phpEnv 默认的 <Directory> 设置仍会忽略 .htaccess。关键错误现象是:规则语法没错,但请求始终 404 或原样透传,RewriteRule 像没写一样。
立即学习“PHP免费学习笔记(深入)”;
在同一个 httpd.conf 文件中,搜索 <Directory,定位到你项目所在的目录段(通常是 <Directory "C:/phpEnv/www"> 或类似路径)。检查其中是否包含:
-
AllowOverride None→ 必须改为AllowOverride All -
Options Indexes FollowSymLinks→ 建议补上+FollowSymLinks(有些版本需显式加号) - Apache 2.4+ 还需有
Require all granted(phpEnv 多基于 2.4,缺了会 403)
改完保存,重启 Apache。此时 .htaccess 才真正开始被读取。
对设计或页面进行 WCAG 2.1 AA 无障碍审计。触发关键词:“audit accessibility”、 “check a11y”、 “is this accessible?” 或在审查设计时使用。
创建和验证 .htaccess 文件本身
Windows 下无法直接新建名为 .htaccess 的文件(系统拒绝无文件名)。常见错误是建成了 htaccess.txt 或 .htaccess.txt,导致 Apache 完全无视。
正确做法(任选其一):
- 用记事本新建文件 → 「另存为」→ 文件名栏输入
".htaccess"(**英文引号必须保留**)→ 编码选 ANSI 或 UTF-8 无 BOM → 保存 - 命令行进入目标目录,执行:
rename htaccess.txt .htaccess - 用支持隐藏文件的编辑器(如 VS Code、Notepad++)直接新建并保存为
.htaccess
写入最简测试规则:
RewriteEngine On<br>RewriteRule ^test$ index.php?mode=test [L]
然后访问 http://localhost/test,应触发 index.php 并能通过 $_GET['mode'] 拿到值。若仍 404,大概率是前两步没做对。
注意 phpEnv 的 DocumentRoot 和 public 目录陷阱
很多 PHP 框架(如 ThinkPHP、Laravel)要求 Web 根目录指向 public/ 子目录,但 phpEnv 默认的 DocumentRoot 指向的是整个 www/。如果把框架丢进 www/ 而不调整,.htaccess 可能放在错的位置(比如放在项目根而非 public/),或者暴露 .env 等敏感文件。
安全做法:
- 将框架的
public/目录路径设为 phpEnv 的DocumentRoot(改httpd.conf中对应行) - 把
.htaccess放在该public/目录下,而不是项目根目录 - 确保
public/.htaccess中的重写目标是index.php(不是public/index.php)
这个层级关系一旦错位,RewriteRule 的路径解析就会失效,且调试时很难一眼看出问题在哪。


















