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

为Nginx子目录网站配置正确的根路径与重定向规则

解决Nginx下主站与/blog子站的重写规则问题

嘿,我来帮你搞定这个Nginx重写的难题!你的核心问题是原规则没有区分主站和/blog子目录的动态请求转发逻辑,导致博客内页的请求被错误地送到了主站的index.php,自然返回404错误。咱们用更清晰的location块来替代原来的多if配置(Nginx里if要尽量少用,容易触发意外行为),具体配置如下:

完整的重写规则配置

# 首先排除Plesk专属的静态统计路径,直接返回静态内容
location ~ ^/(plesk-stat|webstat|webstat-ssl|ftpstat|anon_ftpstat|awstats-icon|internal-nginx-static-location) {
    try_files $uri $uri/ =404;
}

# 处理主站的动态请求(非/blog路径)
location / {
    # 先检查请求的文件/目录是否存在,不存在则转发到主站的index.php
    try_files $uri $uri/ /index.php?$args;
}

# 专门处理/blog子目录的动态请求
location /blog {
    # 先检查/blog下的文件/目录是否存在,不存在则转发到博客的index.php
    try_files $uri $uri/ /blog/index.php?$args;
}

# 通用PHP处理规则(确保Plesk环境下PHP-FPM配置正确)
location ~ \.php$ {
    # 替换成你服务器上实际的PHP-FPM套接字路径,比如php7.4或php8.1
    fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}

配置说明

  1. Plesk路径排除:专门匹配Plesk的统计相关路径,直接返回静态内容,避免被动态规则干扰。
  2. 主站规则:针对根路径的请求,优先访问静态资源,静态资源不存在时,将请求转发到根目录的index.php,带上原请求参数。
  3. 博客子站规则:针对/blog开头的请求,优先检查/blog目录下的静态资源,不存在时转发到/blog/index.php,这样博客的内页请求会被正确交给博客的入口文件处理。
  4. PHP处理:确保所有PHP请求都能正确转发到PHP-FPM,这部分Plesk可能会自动生成,但如果有问题可以手动调整套接字路径。

为什么原规则失效?

原来的多if规则是全局匹配所有路径,当你访问/blog/post-1时,规则会把请求重写到/index.php?blog/post-1——主站的index.php根本不认识这个路径,所以返回404。而新配置通过location /blog单独处理,会把请求转发到/blog/index.php?post-1,博客的程序就能正确解析这个请求了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:53:43