Nginx在现有网站上的一些URI前缀下安装WordPress

ia2d9nvy  于 2023-06-21  发布在  Nginx
关注(0)|答案(1)|浏览(158)

我们有一个网站建设与一个partner的React。我们想在同一个域上添加一个博客,在一个子目录中:

  • example.org => /var/example.org/app
  • example.org/blog => /var/www/example.org/blog

我尝试了很多解决方案,但我总是在www.example.com上得到404example.org/blog

server {

    server_name example.org;

    root /var/www/project/app/functions/build;

    access_log /var/log/nginx/example.org_access.log;
    error_log /var/log/nginx/example.org_error.log;

    index index.html index.htm;

    location ^~ /blog/ {
    
        access_log /var/log/nginx/blog-example.org_access.log;
        error_log /var/log/nginx/blog-example.orgm_error.log;

        alias /var/www/example.org/blog;
        index /index.php;

        # Add a trailing slash if missing
        if (!-f $request_filename) {
            rewrite [^/]$ $uri/ permanent;
        }
        try_files $uri $uri/ /index.php?$args;
    }

    location / {
       try_files $uri @prerender;
    }
    
    location @prerender {
        // .. config for react stuff
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;

        fastcgi_index index.php;
        # Change this to your fpm socket
        fastcgi_pass  unix:/var/run/php/php7.4-fpm.sock;

        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        include fastcgi_params;
    }

}

我试图创建一个带有单独nginx站点conf的子域来测试是否一切正常,结果确实如此。所以这是我的nginx网站配置上面是不好的。
你知道吗?谢谢你!

解决方案

多亏了Ivan Shatsky,我才能纠正我的配置,使一切正常工作。我的主要问题是为什么我总是有404是因为我的索引。我有一个额外的斜杠:index /index.php => index index.php

location /blog/ {

    access_log /var/log/nginx/blog-example.org_access.log;
    error_log /var/log/nginx/blog-example.org_error.log;

    root /var/www/example.org;
    index index.php;

    # Add a trailing slash if missing
    if (!-f $request_filename) {
        rewrite [^/]$ $uri/ permanent;
    }

    try_files $uri $uri/ /blog/index.php?$args;
    

    location ~ \.php {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;

        fastcgi_index index.php;
        # Change this to your fpm socket
        fastcgi_pass  unix:/var/run/php/php7.4-fpm.sock;

        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        include fastcgi_params;
    }
    
}
ut6juiuv

ut6juiuv1#

不知道这是否是一个答案,但我已经看到的错误是:

  • 如果你的react应用程序不使用PHP(我认为它没有),为什么你要使用location ^~ /blog/ { ... },在这个块下面有一个PHP处理程序?这样,对/blog/any/path/file.php的请求就不会到达该PHP处理程序。使用简单的location /blog/ { ... }前缀位置或将PHP处理程序移动到location ^~ /blog/ { ... }内部,使其成为嵌套位置(首选)。
  • 如果你的WP所在的目录是/var/www/example.org/blog,而你的URI pefix是/blog/,你最好使用root /var/www/example.org;而不是alias /var/www/example.org/blog;。如果这些字符串不匹配,请在alias指令参数的末尾添加斜杠:alias /var/www/example.org/blog/;
  • 你使用try_files指令不正确,最后一个参数应该是一个URI,所以要将所有请求重定向到WP索引文件,你应该使用try_files $uri $uri/ /blog/index.php?$args;
  • 您的PHP处理程序使用全局/var/www/project/app/functions/build根而不是WordPress根(如果您将PHP处理程序嵌套在位置中,则此位置将自动消失)。

不确定这就是全部,但让我们从修复这些错误开始。

更新

OP添加了最终工作配置作为原始问题更新。

相关问题