当前位置: 首页 > article >正文

linux nginx maccms管理后台无法进入页面不存在和验证码不显示的问题

windows中运行maccms非常顺利,轻松搭建了。并一切正常。而我在linux中搭建缺遇到了一个非常奇怪的问题。进入管理后台,明明"admin.php"(比如重命名成a.php)的页面是存在的,访问时缺提示页面不存在!稍后就自动跳到首页了。
在这里插入图片描述

环境

操作系统:Ubuntu 20.04.1 LTS
nginx version: nginx/1.18.0 (Ubuntu)
PHP 7.4.3-4ubuntu2.28 (cli) (built: Dec 13 2024 13:46:46) ( NTS )

nginx的配置如下:

server {
    listen       80;
    server_name  video.demo.cool;
    root /etc/nginx/WWW/video.demo.cool;

   
	location / {
		index index.php index.html error/index.html;
 	 	if (!-e $request_filename) {
	        rewrite ^/index.php(.*)$ /index.php?s=$1 last;
	        rewrite ^/admin.php(.*)$ /admin.php?s=$1 last;
	        rewrite ^/api.php(.*)$ /api.php?s=$1 last;
	        rewrite ^(.*)$ /index.php?s=$1 last;
	        break;
   		}
		autoindex off;
	}
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.4-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}


我的搭建详情见:
《Ubuntu 20.04.1 LTS搭建nginx + php7.4运行环境》
https://blog.csdn.net/lxyoucan/article/details/144850572

原因分析

  1. 我怀疑伪静态规则的设置可能没有生效或者出现错误了,官方的示例如下:
location / {
 if (!-e $request_filename) {
        rewrite ^/index.php(.*)$ /index.php?s=$1 last;
        rewrite ^/admin.php(.*)$ /admin.php?s=$1 last;
        rewrite ^/api.php(.*)$ /api.php?s=$1 last;
        rewrite ^(.*)$ /index.php?s=$1 last;
        break;
   }
}
  1. 可能是admin.php相关的代码运行报错了,当作404页面处理了。

探索实验

伪静态规则测试

我的测试方法很简单,因为windows中是可以正常运行的,我故意把windows中的nginx中的伪静态规则删除测试现象

我在windows中的nginx的配置修改前如下:

server {
        listen        22427;
        server_name  maccms.demo.com;
        root   "D:/app/maccms10-2024.1000.4045";
        location / {
            index index.php index.html error/index.html;
			if (!-e $request_filename) {
					rewrite ^/index.php(.*)$ /index.php?s=$1 last;
					rewrite ^/admin.php(.*)$ /admin.php?s=$1 last;
					rewrite ^/api.php(.*)$ /api.php?s=$1 last;
					rewrite ^(.*)$ /index.php?s=$1 last;
					break;
			} 
            autoindex  off;
        }
        location ~ \.php(.*)$ {
            fastcgi_pass   127.0.0.1:9001;
            fastcgi_index  index.php;
            fastcgi_split_path_info  ^((?U).+\.php)(/?.+)$;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            fastcgi_param  PATH_INFO  $fastcgi_path_info;
            fastcgi_param  PATH_TRANSLATED  $document_root$fastcgi_path_info;
            include        fastcgi_params;
        }
}

我去掉

		if (!-e $request_filename) {
					rewrite ^/index.php(.*)$ /index.php?s=$1 last;
					rewrite ^/admin.php(.*)$ /admin.php?s=$1 last;
					rewrite ^/api.php(.*)$ /api.php?s=$1 last;
					rewrite ^(.*)$ /index.php?s=$1 last;
					break;
			} 

经测试并不会出现同样的现象,所以暂时可以排除。

程序报错导致

看来是程序报错导致的,但是程序报错日志我不清楚在哪里查看。

nginx不行就试试Apache吧

搭建LAMP环境,所谓的LAMP指的Linux+Apache+Mysql+PHP. 其中,你的操作系统ubuntu就是Linux。Apache是http服务器,浏览器通过服务器(也就是你的VPS)上的apache提供的服务才能获取到网页资源,从而显示在你的电脑屏幕上。Mysql是数据库,你的网站(这里即是苹果CMS)动态运行时所存取的数据都是由数据库来管理的。PHP与Apache相互配合为用户提供动态的网页,我们要安装的苹果CMS就是php语言编写的,他的运行必须依赖于PHP环境。

因为nginx我是必须要用的,我仅是用apache运行php项目,所以我要把apache中的80端口修改成其他的。

  • 主配置文件:/etc/apache2/apache2.conf
  • 站点配置文件:/etc/apache2/sites-available/ 和 /etc/apache2/sites-enabled/
  • 模块配置文件:/etc/apache2/mods-available/ 和 /etc/apache2/mods-enabled/
  • 环境配置文件:/etc/apache2/envvars
  • 端口配置文件:/etc/apache2/ports.conf
  • 全局配置文件:/etc/apache2/conf-available/ 和 /etc/apache2/conf-enabled/

我把80端口修改成22429

vim /etc/apache2/ports.conf
Listen 22429

然后我把maccms的程序上传到/var/www/html目录,设置一下目录权限

chown -R www-data:www-data /var/www/html
chmod -R 755 /var/www/html

这次发现后台可以进了,但是又遇到了一个新的问题,登录的验证码无法显示了。
在这里插入图片描述
这条路成功一半,并没有完美解决。

nginx无法进入后台的最终解决办法

经过对比windows和linux的nginxs配置的差异,最终我把Linux的配置修改成

server {
    listen       80;
    server_name  vipvideo.demo.cool;
    root /etc/nginx/WWW/vipvideo.demo.cool;

   
	location / {
		index index.php index.html error/index.html;
 	 	if (!-e $request_filename) {
        rewrite ^/index.php(.*)$ /index.php?s=$1 last;
        rewrite ^/admin.php(.*)$ /admin.php?s=$1 last;
        rewrite ^/api.php(.*)$ /api.php?s=$1 last;
        rewrite ^(.*)$ /index.php?s=$1 last;
        break;
   		}
		autoindex off;
	}
	
	 location ~ \.php(.*)$ {
			fastcgi_pass unix:/run/php/php7.4-fpm.sock;
            fastcgi_index  index.php;
            fastcgi_split_path_info  ^((?U).+\.php)(/?.+)$;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            fastcgi_param  PATH_INFO  $fastcgi_path_info;
            fastcgi_param  PATH_TRANSLATED  $document_root$fastcgi_path_info;
            include        fastcgi_params;
        }
}

问题得到解决了。但是验证码还是无法显示。。。
在这里插入图片描述

解决验证码不显示的问题

我在网上找了一圈,好多都说把验证码关掉,或者因为v10使用的是thinkphp开发,修改php.ini文件中 session.save_path = “/tmp”。
以上方法我都尝试了,并没有解决我的问题。
最终解决的方法是安装gd

apt-get install php7.4-gd 

参考:https://www.javazxz.com/thread-1005-1-1.html
终于搞定了,太折腾了。

在这里插入图片描述

参考

https://blog.csdn.net/wanyizhilu/article/details/104684728


http://www.kler.cn/a/466404.html

相关文章:

  • 四种线程池的创建及任务提交
  • 【2025年最新】OpenWrt 更换国内源的指南(图形界面版)
  • SRS 服务器入门:实时流媒体传输的理想选择
  • 贵州省贵安新区地图+全域数据arcgis格式shp数据矢量路网地名+卫星影像底图下载后内容测评
  • C# 设计模式(结构型模式):桥接模式
  • springmvc--请求参数的绑定
  • 深入探究 CSRF 攻击:原理、危害与防范之道
  • 校园顺路代送微信小程序ssm+论文源码调试讲解
  • 接受Header使用错Map类型,导致获取到的Header值不全
  • 黑马Java面试教程_P10_设计模式
  • [每周一更]-(第130期):微服务-Go语言服务注册中心的中间件对比
  • Vue 项目中实现打印功能:基于目标 ID 的便捷打印方案
  • LeetCode 142:环形链表入口
  • qt的utc时间转本地时间
  • Java基本数据类型与字节数组的相互转换
  • JAVA复习题
  • 使用docker desktop提示 需要更新WSL
  • 深入理解 Android 中的 ApplicationInfo
  • 深入Android架构(从线程到AIDL)_07 线程(Thread) 概念
  • 利用Claude3.5点评学习LightRAG源码
  • css中的渐变
  • 学技术学英文:Tomcat的线程模型调优
  • 基于 GitHub API 的 Issue 和 PR 自动化解决方案
  • ArcGIS API for JavaScript 缓冲区分析、河涌关联分析、集中连片分析
  • 高速网络数据包处理中的内核旁路技术
  • Ae 效果详解:漩涡条纹