带有 PHP 的子目录的 Nginx 配置返回 404

尼拉吉潘迪

我有一个网站 www.example.com 使用自定义 PHP 框架和加载完全不同框架的 CMS。它最初是在 apache2 上,现在我正在尝试转移到 nginx。www 域加载文件,但在加载子目录中的代码库时,它只是在我的 nginx 上返回 404。如果我切换回 apache2,它可以正常加载。这是我的配置,我基本上是通过查看其他 stackoverflow 答案拼凑出来的:

server {
listen 80 default;
client_max_body_size 256M;
access_log /var/log/nginx/site.access.log;

root /site;
index index.php;

if (!-e $request_filename) {
    rewrite ^.*$ /index.php last;
}

location ~ \.php$ {
    fastcgi_pass php-fpm:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param PHP_VALUE "error_log=/var/log/nginx/site_php_errors.log";
    fastcgi_buffers 32 32k;
    fastcgi_buffer_size 64k;
    include fastcgi_params;
}

location /cms {
    root /cms/;
}

location ~ /cms/.+\.php$ {
    fastcgi_pass php-fpm:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param PHP_VALUE "error_log=/var/log/nginx/site_php_errors.log";
    fastcgi_buffers 32 32k;
    fastcgi_buffer_size 64k;
    include fastcgi_params;
}

}

我试过这个答案,但运气不佳。我必须错误地设置了一些基本配置,但似乎无法弄清楚是哪个。/cms中的.htaccess如下:

RewriteEngine On
RewriteBase /cms

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?request=$1 [L,QSA]

编辑:使用此示例更新了配置,我现在可以登录到 CMS,但它立即进入 302 重定向循环,我无法弄清楚为什么会发生这种情况:

server {
listen 80 default_server;

# client_max_body_size 256M;

root /application;

index index.php;

server_name _;

# access_log /var/log/nginx/application.access.log;

location / {
   try_files $uri $uri/ /index.php$is_args$args;
}

location /cms {
        alias /application/cms;
        try_files $uri $uri/ @cms;

        location ~ \.php$ {
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $request_filename;
            fastcgi_pass php-fpm:9000;
        }
    }

location @cms {
    rewrite /cms/(.*)$ /cms/index.php?/$1 last;
}

location ~ \.php$ {
    include fastcgi_params;
    fastcgi_pass php-fpm:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param PHP_VALUE "error_log=/var/log/nginx/application_php_errors.log";
    fastcgi_buffers 32 32k;
    fastcgi_buffer_size 64k;
}

}

亚尼斯去

我想我在你的实际代码中找到了你的问题,这部分:location ~ \.php$ {期望找到文件调用.php是你总是有 404 错误的原因。只需像这样更新:

location ~ index.php$ {
    include fastcgi_params;
    fastcgi_pass php-fpm:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param PHP_VALUE "error_log=/var/log/nginx/application_php_errors.log";
    fastcgi_buffers 32 32k;
    fastcgi_buffer_size 64k;
}

我建议您使用:(fastcgi_pass unix:/run/php/php7.1-fpm.sock;请检查/run/php/文件夹上的可用套接字)而不是本地网络调用php-fpm:9000很有表现力。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Traefik:所有子目录返回404

来自分类Dev

php中的Nginx:子目录下的php文件抛出404错误

来自分类Dev

Nginx php-fpm子目录

来自分类Dev

配置Nginx语言子目录

来自分类Dev

带有目录和子目录的数组PHP较慢

来自分类Dev

Nginx:一个域中子目录上有多个PHP fpm

来自分类Dev

带有子目录的IIS 8配置页面

来自分类Dev

从Nginx中的子目录运行辅助PHP应用

来自分类Dev

有“ ls”返回结果的子目录吗?

来自分类Dev

有“ ls”返回结果的子目录吗?

来自分类Dev

从给定路径返回所有子目录的类型

来自分类Dev

Nginx及其子目录

来自分类Dev

带有PHP GET变量的子目录中的.htaccess RewriteRule

来自分类Dev

带有两个子目录的apache2 virtualhost配置

来自分类Dev

重定向到子目录,总是在Slim php中找不到404

来自分类Dev

在asp.net MVC项目中,访问子目录中的HTML页面返回404错误

来自分类Dev

如何在Nginx的子目录中获取Slim PHP Framework路由

来自分类Dev

Nginx-Php子目录文件不断重定向到主页

来自分类Dev

如何在Nginx的子目录中获取Slim PHP Framework路由

来自分类Dev

子目录中的WordPress在Nginx fastcgi上提供根index.php

来自分类Dev

NGINX虚拟子目录将PHP文件作为下载文件提供

来自分类Dev

10月CMS作为子目录安装-找不到/ backend,Nginx配置问题?

来自分类Dev

Nginx将子目录的所有内容重定向到另一个子目录

来自分类Dev

如何在php中列出目录,子目录和所有文件

来自分类Dev

PHP 删除目录和任何子目录中的所有空文件

来自分类Dev

Flarum Homestead Laravel子目录404

来自分类Dev

Nginx反向代理为PHP返回404

来自分类Dev

Nginx允许访问子目录

来自分类Dev

如何返回不带子文件夹/子目录的URL(使用PHP而不是htaccess)

Related 相关文章

热门标签

归档