尝试访问 WordPress 帖子时出现“404 Not Found Nginx”错误

尝试访问 WordPress 帖子时出现“404 Not Found Nginx”错误

我在域 (example.com) 的根目录中部署了一个 NodeJS 应用程序,过去 7 天内我一直在努力在子目录 (example.com/blog) 中添加博客。尽管我已经设置好了,但我认为 Nginx 配置存在一些问题,因为我无法访问博客文章(博客主页可以访问)。还值得一提的是,如果我在 Wordpress 设置中将永久链接设置为纯文本,我就可以访问这些帖子,但由于 SEO,我不想这样做。

如果我查看错误日志,我可以看到以下内容:

2022/09/02 15:43:43 [error] 86838#86838: *6 "/var/www/html/example.com/blog/advantages-of-social-media-2/index.php" is not found (2: No such file or directory), client: 142.52.23.144, server: www.example.com, request: "GET /blog/advantages-of-social-media-2/ HTTP/1.1", host: "www.example.com", referrer: "https://www.example.com/blog/"

Wordpress 安装位于,/var/www/html/example.com/blog但我没有在配置中添加/blog,但我仍然可以访问博客主页。如果我添加它,那么我就无法再访问它了。

我尝试了无数种不同的解决方案,但似乎都不起作用。请有人帮帮我。我快疯了。我甚至在官方 Nginx 社区、Wordpress 社区、Reddit 和其他几个地方发帖,但到目前为止没有任何效果。请帮忙!

以下是不包含 SSL 语句的完整 Nginx 配置:

server {

       server_name example.com;
       return 301 https://www.example.com$request_uri;    

}

server {

        server_name www.example.com;

        # NodeJS App
        location / {
                proxy_pass http://localhost:3000;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection 'upgrade';
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $http_cf_connecting_ip;
                proxy_set_header X-Forwarded-For $http_x_forwarded_for;
                proxy_cache_bypass $http_upgrade;
        }

        # Wordpress Blog
        location /blog {

                access_log /var/log/nginx/blog_access.log;
                error_log /var/log/nginx/blog_error.log;

                root /var/www/html/example.com;
                index index.php;

                # Add a trailing slash if missing
                if (!-f $request_filename) {
                        rewrite [^/]$ $uri/ permanent;
                }
                
                # try_files $uri $uri/ /index.php?$args;
                # try_files $uri $uri/ /blog/index.php?q=$uri&$args;
                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/php8.1-fpm.sock;

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

        }
}

答案1

DocumentRoot(Apache 术语)。了解这一点。

www.example.com--> /x/x/x/主应用程序文档根目录 www.example.com/blog/--> y/y/y/y/博客应用程序文档根目录

除此之外,你还需要一步一步地逻辑地追溯这一切(并重新追溯你的步骤!)。什么是www.example.com作为第一个拦截器进行路由。默认情况下,什么处理此请求?下一步需要做什么?它如何引导流量等。

在 Apache 领域,大多数情况下,如果您知道 .htaccess 文件的位置以及如何配置它,那么您就可以实现此结果。保持技术分离,同时出于 SEO 目的,让所有内容都在单个域下运行。

正如所有事物一样,这一切都取决于您的设置。

最终,您似乎想要“某处”某种形式的逻辑,它说;

如果(URI 以 '/blog/' 开头)则发送到服务器XRunningWordPressAsAReverseProxy

希望这能给你一个指引,帮助你追踪这个问题,找出你需要配置什么以及在哪里配置。

相关内容