phpenv 的 apache 需手动启用 mod_rewrite:取消 loadmodule rewrite_module modules/mod_rewrite.so 前的 #,将项目目录 中的 allowoverride none 改为 all,保存后重启 apache 服务。

phpEnv 是 Windows 下轻量级 PHP 集成环境(类似 XAMPP/WAMP,但更精简),默认使用 Apache + PHP + MySQL 架构。它不自带图形化配置面板,所有设置需手动修改 Apache 配置文件,伪静态支持也必须「手工开启模块 + 放行 .htaccess 权限 + 写规则」三步到位。
确认 phpEnv 的 Apache 是否已启用 mod_rewrite
phpEnv 的 Apache 配置文件路径通常是 phpenv\apache\conf\httpd.conf(具体以你解压目录为准)。打开后检查两处:
- 搜索
LoadModule rewrite_module modules/mod_rewrite.so—— 若该行被#注释,删掉开头的# - 搜索
AllowOverride None,找到你项目所在目录的<directory></directory>段(比如<directory></directory>),把里面的AllowOverride None改成AllowOverride All
改完保存,重启 phpEnv 的 Apache 服务(通常双击 phpenv\start_apache.bat 或通过托盘图标操作)。不重启,改了等于没改。
.htaccess 文件名容易写错或被系统隐藏
Windows 资源管理器默认不显示以点开头的文件,直接右键新建「文本文档」再改名为 .htaccess 会失败(系统会自动补上 .txt 后缀)。正确做法是:
- 用记事本新建文件 → 「另存为」→ 文件名栏输入
".htaccess"(英文引号必须保留)→ 编码选 UTF-8 无 BOM → 保存 - 或用命令行:进入项目根目录,执行
echo. > .htaccess创建空文件,再用编辑器写入规则 - 若已存在但无效,检查文件实际名字是不是
.htaccess.txt—— 这是最常见的 404 或规则不生效原因
phpEnv 下常用伪静态规则写法(适配 ThinkPHP/Laravel/自定义路由)
把以下内容粘贴进 .htaccess,注意替换 index.php 路径是否匹配你的入口文件名(有些项目叫 router.php 或 public/index.php):
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?path=$1 [QSA,L]
说明:
-
RewriteCond %{REQUEST_FILENAME} !-f和!-d是关键保护——只对真实不存在的文件/目录才重写,避免把css/app.css也转给 PHP 处理 -
[QSA,L]中QSA表示保留原始查询参数(如?ref=abc),L表示终止后续规则,缺一不可 - 如果项目用的是 PATH_INFO 模式(如 ThinkPHP 3.x 的
index.php/module/action),规则要改成:RewriteRule ^(.*)$ index.php/$1 [L],并确保 Apache 开启AcceptPathInfo On(在<directory></directory>段内加一行)
验证时访问路径别带端口号或子目录干扰
phpEnv 默认监听 80 端口,但如果你改过端口(比如用了 8080),浏览器访问必须显式带上:http://localhost:8080/test/123。常见错误:
- 用
file://协议直接双击 HTML 打开 —— 伪静态完全不工作,因为没走 Apache - 项目放在子目录(如
http://localhost/myapp/),但.htaccess里没设RewriteBase /myapp/,会导致重写目标错乱 - Chrome 缓存了 404 响应,换 Firefox 或加
Ctrl+F5强刷,否则你以为规则没生效,其实是缓存骗了你
最简单的验证方式:在项目根目录放一个 index.php,内容为 <?php var_dump($_GET); ?>,然后访问 http://localhost/test/123,看到 ["path"]=> string(7) "test/123" 就对了。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











