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路由。
关键配置说明
- PHP处理块:这是核心,所有
.php结尾的请求必须通过这个块交给PHP-FPM处理,否则PHP文件会被当作静态文件下载。 - 根目录伪静态:
try_files $uri $uri/ $uri.php =404的逻辑是:先找请求路径对应的静态文件,找不到就找对应目录,再找不到就尝试添加.php后缀的文件,最后都不存在则返回404,实现无.php访问。 - WordPress子目录配置:
try_files的最后必须指向/blog/index.php,这样WordPress的路由系统才能接收并处理/blog下的所有请求,带上?$query_string是为了保留URL中的查询参数。
内容的提问来源于stack exchange,提问作者timgavin
相关产品推荐
相关产品推荐

