You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nginx try_files指令无法移除.php扩展名及WordPress子目录异常问题

Nginx配置解决:根目录PHP伪静态+子目录WordPress共存问题

正确配置示例

# 通用PHP处理规则(必须配置,否则PHP文件会被直接下载)
location ~ \.php$ {
    fastcgi_pass unix:/run/php/php7.4-fpm.sock; # 请根据你的PHP版本和FPM路径调整
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}

# 根目录伪静态:移除.php扩展名
location / {
    try_files $uri $uri/ $uri.php =404;
}

# /blog子目录WordPress伪静态配置
location /blog {
    try_files $uri $uri/ /blog/index.php?$query_string;
}

问题原因分析

第一种配置的问题

你之前的第一个配置缺少独立的PHP处理块,Nginx遇到.php文件时不知道要交给PHP-FPM解析,直接把文件内容返回给浏览器,导致PHP文件被下载。

第二种配置的问题

你给/blog配置的try_files最后指向了根目录的/index.php,而非WordPress所在子目录的/blog/index.php,这导致所有博客路由请求都被转发到站点首页,WordPress无法正确处理自身URL路由。

关键配置说明

  1. PHP处理块:这是核心,所有.php结尾的请求必须通过这个块交给PHP-FPM处理,否则PHP文件会被当作静态文件下载。
  2. 根目录伪静态:try_files $uri $uri/ $uri.php =404的逻辑是:先找请求路径对应的静态文件,找不到就找对应目录,再找不到就尝试添加.php后缀的文件,最后都不存在则返回404,实现无.php访问。
  3. WordPress子目录配置:try_files的最后必须指向/blog/index.php,这样WordPress的路由系统才能接收并处理/blog下的所有请求,带上?$query_string是为了保留URL中的查询参数。

内容的提问来源于stack exchange,提问作者timgavin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 14:02:51