phpenv默认apache不启用mod_rewrite且禁止.htaccess,需在httpd.conf中取消loadmodule rewrite_module注释、将allowoverride none改为all,重启apache;windows下需用记事本另存为".htaccess"或命令行创建;规则须含rewriteengine on,示例rewriterule ^test/([0-9]+)$ index.php?id=$1 [l,qsa]可验证生效;切nginx后需改server块内rewrite指令并重启。

phpEnv 默认用 Apache,但默认不启用 mod_rewrite 模块,也不允许 .htaccess 生效——所以直接扔进去规则,一定不生效。
确认 phpEnv 的 Apache 是否加载了 mod_rewrite
打开 phpEnv 界面 → 点击「应用软件」→ 「Apache」→ 「配置文件」→ 打开 httpd.conf。搜索以下两行:
-
LoadModule rewrite_module modules/mod_rewrite.so:确保前面没# -
AllowOverride None(在<directory></directory>或你实际网站根目录的区块里):必须改成AllowOverride All
改完保存,回到 phpEnv 界面,点击「重启 Apache」——不重启,改等于白改。
在网站根目录正确创建 .htaccess 文件
Windows 下无法直接新建名为 .htaccess 的文件(系统会拒掉开头的点)。必须用以下任一方式:
- 用记事本写好内容,「另存为」时在「文件名」栏手动输入
".htaccess"(英文引号包裹,含点) - 命令行进到网站目录,执行:
echo. > .htaccess,再用编辑器打开写规则
常见错误:文件名写成 htaccess.txt、.htaccess.txt 或漏掉 RewriteEngine On——这会导致整段规则静默失效。
写一条能验证的 RewriteRule 示例
在 .htaccess 里粘贴以下最小可用规则(适配 phpEnv 默认路径):
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^test/(\d+)$ index.php?id=$1 [L,QSA]
然后访问 http://localhost/test/123,如果看到 index.php 正确收到 $_GET['id'] === '123',说明重写通了。注意:
- 不要用
\d(phpEnv 常带较老 Apache 版本),统一用[0-9] - 如果网站部署在子目录(如
http://localhost/myapp/),必须加RewriteBase /myapp/ - 共享主机或某些 phpEnv 定制版可能禁用
AllowOverride All,此时只能换 Nginx 模式或联系环境维护者
phpEnv 切换到 Nginx 模式后怎么配重写
phpEnv 支持切换 Web 服务器。若切到 Nginx,则 .htaccess 完全无效,所有规则必须写进站点配置文件:
- phpEnv → 「应用软件」→ 「Nginx」→ 「配置文件」→ 找到你的站点
server块 - 在
location / { }内添加:rewrite ^/test/([0-9]+)$ /index.php?id=$1 last; - 保存后点「重启 Nginx」;用
nginx -t检查语法是否报错
Nginx 的 last 对应 Apache 的 [L],但不会重新匹配 location;如果要彻底终止并跳转,用 break。
最常被忽略的一点:phpEnv 启动时若用了自定义域名(如 www.tp.com),.htaccess 规则仍按实际请求路径匹配,和 hosts 或虚拟主机名无关——别在规则里硬写域名,除非你真要用 %{HTTP_HOST} 做条件判断。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











