我们有一个网站建设与一个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;
}
}
1条答案
按热度按时间ut6juiuv1#
不知道这是否是一个答案,但我已经看到的错误是:
location ^~ /blog/ { ... }
,在这个块下面有一个PHP处理程序?这样,对/blog/any/path/file.php
的请求就不会到达该PHP处理程序。使用简单的location /blog/ { ... }
前缀位置或将PHP处理程序移动到location ^~ /blog/ { ... }
内部,使其成为嵌套位置(首选)。/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;
/var/www/project/app/functions/build
根而不是WordPress根(如果您将PHP处理程序嵌套在位置中,则此位置将自动消失)。不确定这就是全部,但让我们从修复这些错误开始。
更新
OP添加了最终工作配置作为原始问题更新。