我有一个带有 php5-fpm 的 nginx 服务器,托管 3 个框架。1 个 PHP 框架,2 个 wordpress。
所有内容都位于 /var/www 文件夹中,因此出于此目的
- /var/www/website——PHP 框架
- /var/www/blog——Wordpress
- /var/www/blog2 Wordpress
当尝试访问博客时,所有资产(css、图像等...)都不起作用,它们会抛出 404。我也无法访问 wp-admin 页面,因为它会导致无限重定向。
这是Nginx配置文件中的相关信息。
server{
root /var/www/website;
index index.html index.htm index.php;
set $php_root /var/www/website;
location /blog {
set $php_root /var/www/blog;
if(!-e $request_filename){
rewrite ^(.+)$ /index.php last;
break;
}
}
location /blog2 {
set $php_root /var/www/blog2;
if(!-e $request_filename){
rewrite ^(.+)$ /index.php last;
break;
}
}
location / {
if(!-e $request_filename){
rewrite ^(.+)$ /index.php last;
break;
}
}
location ~ \.php$ {
fastcgi_param SCRIPT_FILENAME $php_root$fastcgi_script_name;
}
}
非常感谢您的任何帮助。
答案1
您的配置问题在于您仅设置了访问 PHP 文件的路径,而 nginx 仍尝试通过root
指令中指定的目录访问静态资源。
alias
是当您想要从不同目录提供某些 URI 时应该使用的指令。
这应该是适合您需要的配置。
server {
root /var/www/website;
index index.html index.htm index.php;
try_files $url $url/ /index.php;
location /blog {
alias /var/www/blog;
}
location /blog2 {
alias /var/www/blog2;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
if (!-f $document_root$fastcgi_script_name) {
return 404;
}
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
}
}