phpenv子目录伪静态需手动配置nginx server块,因不支持.htaccess;须添加location /myapp/块,用alias映射路径,修正script_filename和request_uri前缀,三者前缀必须对齐。

phpEnv 下二级目录(子目录)启用伪静态,必须手动改 server 块配置,不能靠 .htaccess 自动生效——因为 phpEnv 默认用的是 Nginx,且其内置的 Nginx 配置不读取用户自定义的 .htaccess。
phpEnv 的 Nginx 配置不支持 .htaccess
很多人在 phpEnv 的网站根目录或子目录里放了 .htaccess,但完全没反应。这不是规则写错了,而是 phpEnv 用的是 Nginx,压根不识别 .htaccess 文件。Apache 才用它,Nginx 必须把重写逻辑写进 server 块里。
- phpEnv 启动后,实际加载的是
Nginx + PHP-FPM组合,所有 rewrite 行为都由 Nginx 主配置驱动 - 它的默认站点配置通常位于
C:\phpEnv\nginx\vhosts\下某个.conf文件中(如localhost.conf) - 即使你启用了 Apache 模式,phpEnv 的“Apache”也是精简模拟版,
mod_rewrite默认未开启,也不推荐切过去
子目录部署时,location 和 try_files 必须显式匹配路径前缀
比如你的项目放在 http://localhost/myapp/,那么 Nginx 不会自动把 /myapp/article/123 映射到 myapp/index.php——它只会按 location / 匹配,而默认规则只覆盖根路径。
- 必须添加独立的
location /myapp/ { ... }块,不能复用根location / -
try_files的 fallback 路径要带子目录前缀:/myapp/index.php?$query_string,否则 Nginx 会去找根目录下的index.php - PHP 的
SCRIPT_FILENAME也要同步修正,否则报No input file specified:fastcgi_param SCRIPT_FILENAME $document_root/myapp$fastcgi_script_name;
rewrite 规则写法:优先用 try_files,慎用 rewrite + last
在子目录场景下,rewrite ^/myapp/(.*)$ /myapp/index.php?_url=/$1 last; 看似直观,但容易触发循环重定向或 404——尤其当 index.php 本身也在子目录里时,Nginx 可能反复解析路径。
- 更可靠的做法是用
try_files判断文件是否存在:location /myapp/ { alias C:/phpEnv/www/myapp/; index index.php; try_files $uri $uri/ /myapp/index.php?$query_string; } -
alias比root更适合子目录:它把请求路径直接映射到物理目录,避免路径拼接错误 - 如果用了
root,记得末尾不加斜杠;用了alias,末尾必须加斜杠,否则index.php404
PHP 端解析 REQUEST_URI 时要 trim 掉子目录前缀
服务器转发后,$_SERVER['REQUEST_URI'] 是完整路径,比如 /myapp/about。如果你直接拿它做路由分发,控制器会误认为路径是 myapp/about,而不是 about。
- 务必先剥离子目录前缀:
$path = $_SERVER['REQUEST_URI']; $subdir = '/myapp'; if (strpos($path, $subdir) === 0) { $path = substr($path, strlen($subdir)); } $path = trim($path, '/'); - 别用
parse_url(..., PHP_URL_PATH)直接取,它返回的仍是带前缀的路径 - 框架(如 ThinkPHP)若设了
APP_SUB_DOMAIN_DEPLOY或URL_HTML_SUFFIX,也要同步配置子目录 base path
子目录伪静态最难的不是写规则,而是 Nginx 配置、PHP 路径、应用层路由三者之间的前缀对齐。漏掉任意一环,就会出现 404、空白页或 No input file specified ——而且错误日志里往往只显示“file not found”,不会告诉你到底是哪一层丢了前缀。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











