chekun/DiliCMS

关于DiliCMS在nginx环境下伪静态问题

carl-G opened this issue · 6 comments

DiliCMS在nginx下不特殊配置的话,只会显示首页,跳转其他页面都会显示404,之后再nginx.conf中添加如下配置

server {
        listen       80;
        root /www/web/xxx/;
        server_name xxx.com xxx.com;
        index  index.html index.php index.htm;
        error_page  400 /errpage/400.html;
        error_page  403 /errpage/403.html;
        error_page  404 /errpage/404.html;
        error_page  503 /errpage/503.html;
        location ~ ^(/(application|system|services|shared|admin/backup|admin/config|admin/controllers|admin/core|amdin/errors|admin/hooks|admin/language))/ {
            deny all;
        }
        location / {

            if ($request_uri ~* index/?$)
            {
                rewrite ^/(.*)/index/?$ /$1 permanent;
            }

            if (!-d $request_filename)
            {
                rewrite ^/(.+)/$ /$1 permanent;
            }
            if (!-e $request_filename) {
                rewrite ^/(.*)$ /index.php/$1 last;
                break;
            }
            set $admin '';
            if ($request_uri ~* ^/admin/) {
                set $admin A;
            }

            if ($request_uri ~* ^/install/) {
                set $admin B;
            }

            if (!-e $request_filename) {
                set $admin "X${admin}";
            }

            if ($admin = XA) {
                rewrite ^/admin/(.*)$ /admin/index.php?/$1 last;
                break;
            }

            if ($admin = XB) {
                rewrite ^/install/public/(.*)$ /install/public/index.php?/$1 last;
            }

            if ($admin = X) {
                rewrite ^/(.*)$ /index.php?/$1 last;
                break;
            }

        }
  
        location ~ \.php($|/) {           
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_split_path_info ^(.+\.php)(.*)$;
            fastcgi_param   PATH_INFO $fastcgi_path_info;
            fastcgi_param  SCRIPT_FILENAME  /www/web/xxx$fastcgi_script_name;
            fastcgi_param    PATH_TRANSLATED    $document_root$fastcgi_path_info;
            include        fastcgi_params;
        } 
        location ~ /\.ht {
                deny  all;
        }
}

添加之后页面可以跳转,后台也一切正常,但是上传图片时出错,路径如下:
‘/admin/index.php/content’
应该是上面配置文件的原因,现在不知道怎么解决这个问题了,希望能够得到解答!

上传图片出错?是模型自带的上传图片功能出错,还是用的上传字段?
另外,可以看一下报错信息,前端的可打开chrome的开发者工具看网络请求,后端的话可以看一下nginx的error日志,然后贴出来,我们一起研究下 😃

应该不是代码的问题。在apache里一切正常的,上传到了nginx就出了问题,您有过在nginx方面的配置经验吗?

点击上传之后会报如下:
Error Number: 1064

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1

UPDATE web_attachments SET model = '2', from = 0, content = '12' WHERE aid in (0,)

Filename: /xxx/admin/controllers/content.php

Line Number: 358

我一直都是使用nginx的。
嗯,是个BUG,好像是传递附件的🆔没有正确被提交到服务器造成的。
PS:你用的那个版本的DiliCMS,因为我看最新版本的358行已经不是这个了。

谢谢啦,我这边问题解决了,我这边用的是被改过的2.4版本。原因是因为放在别人的服务器那里,他没有给我权限。。。所以无法提交服务器,我改变路径就发现可以,然后就发现原因了。现在已经调整好了。谢谢您的指点!

Good 👍