我的知识记录

网站404错误排查_页面不存在原因与修复方案

网站404 Not Found错误表示请求的页面不存在。404原因:1.URL错误——输入的URL不对(拼写错、多空格、少字符);2.页面被删——文章/页面被删除,URL失效;3.伪静态未配置——动态程序URL重写规则没配,静态URL访问404;4.文件不存在——静态HTML文件被删或路径错;5.目录索引禁止——访问目录但没有index文件且禁止目录列表(403不是404,但相关);6.重定向规则错——rewrite规则把URL转到不存在的文件;7.CDN缓存——CDN缓存了404页面,源站正常但CDN返回404。排查:1.确认URL——复制URL检查拼写,在后台确认页面/文章是否存在;2.测试动态URL——伪静态URL 404时,测试动态URL(如index.php?p=home/List/index&id=1)是否正常,如果动态正常是伪静态问题;3.检查文件——静态页面确认文件存在(FTP看文件);4.检查伪静态规则——.htaccess/nginx rewrite规则是否正确(对照程序官方规则);5.清CDN缓存——CDN回源测试,刷新CDN缓存;6.看Web服务器日志——Nginx/Apache访问日志看404请求的具体文件路径。解决:a.伪静态问题——配置正确的重写规则(Apache .htaccess、Nginx rewrite),确认Web服务器支持mod_rewrite;b.页面被删——恢复页面或设置301重定向到相关页面;c.URL错误——修正链接;d.文件不存在——重新上传文件;e.CDN缓存——刷新CDN,配置404页面回源;f.自定义404页——配置友好的404页面(提示+搜索+热门文章+返回首页),减少用户流失。404是常见错误,关键是区分是真不存在还是配置问题。

网站上传/邮件/验证码/session错误排查。文件上传错误——原因:a.上传目录权限不足——PHP对上传目录(upload/data/upload/static/upload)没有写入权限(应755,属主www),解决:chmod 755 上传目录,chown www-data:www-data;b.PHP配置限制——upload_max_filesize(上传文件最大,默认2M)、post_max_size(POST数据最大,应大于upload_max_filesize)太小,大文件上传失败,解决:php.ini改upload_max_filesize=20M、post_max_size=25M,宝塔PHP设置中改;c.最大执行时间——大文件上传超过max_execution_time(默认30秒)被中断,解决:调大max_execution_time=300,或用分片上传;d.Nginx限制——client_max_body_size太小(默认1M),大文件上传Nginx返回413,解决:Nginx配置http或server块加client_max_body_size 50M; e.磁盘满——服务器磁盘空间不足,上传失败,解决:df -h看空间,清理旧备份/日志/缓存,扩容;f.文件类型限制——程序只允许特定类型(jpg/png/gif/pdf),上传不允许的类型被拒,解决:检查程序上传类型配置,确认文件类型在允许列表;g.临时目录不可写——PHP上传临时目录(upload_tmp_dir,默认/tmp)不可写或满,解决:确认/tmp可写且有空间,或改upload_tmp_dir到可写目录;h.安全软件拦截——WAF/安全狗/云锁拦截上传(误判恶意文件),解决:临时关闭测试,把上传URL加白名单。排查:看PHP错误日志(上传错误信息)、看程序上传日志、测试小文件是否能传(小文件能传大文件不能是配置限制,都不能传是权限/目录问题)、检查php.ini配置(phpinfo看upload_max_filesize等)、检查磁盘空间。解决:根据原因修复(权限、PHP配置、Nginx配置、磁盘、类型、临时目录、WAF)。邮件发送错误——网站发邮件(注册/留言/密码重置/订单)失败。原因:a.SMTP配置错误——SMTP服务器地址、端口、用户名、密码、加密方式(SSL/TLS)填写错误,解决:核对SMTP配置(QQ邮箱smtp.qq.com:465 SSL、163 smtp.163.com:465、阿里云邮件推送smtpdm.aliyun.com:465),密码是授权码不是登录密码(QQ/163需要开启SMTP并生成授权码);b.服务器禁用mail函数——php.ini disable_functions禁用了mail(),解决:用SMTP方式发信(PHPMailer/SwiftMailer,不走mail函数),或取消禁用mail(不推荐,容易被滥用);c.25端口被封——云服务商(阿里云/腾讯云)默认封禁25端口(防垃圾邮件),用25端口发信失败,解决:用465(SSL)或587(TLS)端口,不用25;d.防火墙拦截——服务器防火墙拦截SMTP端口(465/587),解决:开放出站端口;e.邮件被拒收/进垃圾箱——新服务器IP信誉低、没有SPF/DKIM、内容被判定垃圾邮件,解决:配置SPF记录(DNS TXT v=spf1 ip4:服务器IP ~all)、DKIM签名、PTR反向解析,用第三方邮件推送服务(阿里云邮件推送、SendGrid、Mailgun)保证送达率;f.PHP扩展缺失——需要openssl扩展(SSL/TLS加密),没装导致SMTP SSL连接失败,解决:安装openssl扩展;g.邮件内容编码——中文邮件没设编码(UTF-8),乱码或被拒,解决:邮件头部设Content-Type: text/html; charset=utf-8,用PHPMailer自动处理。排查:看邮件发送日志(程序日志、SMTP调试信息),测试SMTP连接(命令行telnet smtp.qq.com 465或openssl s_client -connect smtp.qq.com:465),看是否能连通,用测试脚本发信看错误信息。解决:修正SMTP配置、用465/587端口、配置SPF/DKIM、用第三方邮件服务、安装openssl、设编码。验证码错误——验证码不显示或验证失败。原因:a.GD库未安装——PHP GD扩展没装,验证码图片无法生成,解决:安装php-gd扩展(宝塔PHP设置中安装gd),phpinfo确认GD支持;b.输出前有内容——验证码图片输出前有其他输出(空格、BOM头、echo),图片格式损坏显示不出来,解决:确保验证码PHP文件开头没有BOM、没有空格/输出,ob_clean()清缓冲再输出图片;c.session问题——验证码存在session中,session没启动或session目录不可写,验证时取不到验证码,解决:session_start()确保启动,session目录(/var/lib/php/sessions)可写,session.cookie_path正确;d.验证码过期——验证码设置了有效期(如5分钟),超时失效,解决:在有效期内使用,或延长有效期;e.区分大小写——验证码区分大小写但用户输入大小写不对,解决:程序中统一转小写(strtolower)再比较,或提示不区分大小写;f.字体文件缺失——验证码用了自定义字体但字体文件路径错或不存在,解决:确认字体文件存在,路径正确,或用默认字体;g.缓存——CDN/浏览器缓存了旧验证码图片,显示旧的,解决:验证码URL加随机参数(?t=时间戳)防缓存,CDN不缓存验证码URL。排查:phpinfo看GD扩展,直接访问验证码PHP文件看是否显示图片(不显示是GD/输出问题,显示是session/验证逻辑问题),看session是否正常(测试session读写),看验证码文件编码(无BOM)。解决:安装GD、清输出缓冲、修session、统一大小写、确认字体、加随机参数防缓存。session错误——登录状态丢失、验证码取不到、购物车清空。原因:a.session没启动——代码没session_start(),session不生效,解决:在用到session的页面开头session_start();b.session目录不可写——session.save_path目录(默认/var/lib/php/sessions或/tmp)权限不足或满,session无法存储,解决:chmod 733 /var/lib/php/sessions(或属主root:www-data 770),确认空间,或改session.save_path到可写目录;c.cookie问题——sessionid存在cookie中,cookie路径/域名不对、浏览器禁用cookie、cookie过期,解决:session.cookie_path设为/,session.cookie_domain设为域名(或不设默认当前域名),确认浏览器允许cookie,session.gc_maxlifetime设足够长(如7200秒);d.session丢失——页面跳转时session丢失(HTTP和HTTPS混用、www和非www域名不同、sessionid没传),解决:全站统一HTTPS和域名(301重定向统一),session.cookie_secure=On(HTTPS站点),session.cookie_httponly=On(安全);e.并发写入——多个请求同时写session(AJAX并发),session锁导致数据丢失,解决:session_write_close()用完就关闭写锁,或用数据库/Redis存session;f.空间满——session所在磁盘满,无法写session,解决:清理磁盘。排查:测试session(页面1存session,页面2读,看是否能读到),看session目录权限和空间,看浏览器cookie是否有PHPSESSID,看phpinfo session配置。解决:启动session、修session目录权限、统一域名/HTTPS、调大session生命周期、用完关闭写锁、清理磁盘。上传/邮件/验证码/session是网站常见功能错误,按流程排查基本能解决。

网站SSL/HTTPS错误与403/权限错误。SSL证书错误——HTTPS网站常见问题:a.证书过期——浏览器提示「您的连接不是私密连接」「证书已过期」,解决:续签证书(Let's Encrypt免费证书自动续期失败时手动续,或重新申请),宝塔面板站点设置→SSL→续签;b.证书域名不匹配——证书签发给www.域名.com,但访问的是域名.com(不带www)或其他子域名,浏览器提示证书不匹配,解决:申请包含多个域名的证书(SAN证书,Let's Encrypt可同时签www和@),或配置301重定向(带www和不带www统一跳转到一个);c.证书链不完整——只安装了域名证书没装中间证书(CA bundle),浏览器(特别是移动端/旧浏览器)提示不安全,解决:安装完整证书链(证书+中间证书,宝塔/面板会自动处理,手动配置时把证书和中间证书拼在一起);d.混合内容——HTTPS页面加载了HTTP资源(图片/CSS/JS/接口),浏览器地址栏锁变感叹号,提示「此页面包含不安全内容」,解决:把页面中所有HTTP资源改为HTTPS(相对路径//或https://),数据库中旧的HTTP链接批量替换为HTTPS,CDN配置强制HTTPS;e.证书安装错误——证书文件和私钥不匹配、格式错(PEM/DER),解决:确认证书和私钥对应(从同一次CSR生成),用PEM格式(.crt/.key),重新安装;f.强制HTTPS配置——配置301重定向把HTTP跳转到HTTPS(Nginx return 301 https://$host$request_uri; 或Apache .htaccess RewriteRule),确保全站HTTPS;g.HSTS——开启HSTS(HTTP Strict Transport Security),浏览器强制HTTPS,Nginx add_header Strict-Transport-Security "max-age=31536000";。403 Forbidden——禁止访问,服务器理解请求但拒绝执行。原因:a.文件/目录权限不足——Web服务器用户(www-data/nginx)没有读取权限(文件应644、目录755),或属主不对(chown www-data:www-data);b.目录索引禁止——访问目录但目录下没有index文件(index.php/index.html),且Options -Indexes禁止目录列表,解决:上传index文件或允许目录索引(不推荐,安全风险);c.IP被封——服务器防火墙/WAF/网站程序封禁了访问IP(.htaccess deny、Nginx deny、安全插件),解决:检查封禁规则,解封误封IP;d.认证失败——目录设置了密码保护(.htpasswd),输入密码错误或取消,解决:输入正确密码或取消密码保护;e.文件不存在+禁止目录列表——URL指向目录但没index,403;f.SELinux——CentOS SELinux拦截(安全上下文不对),解决:chcon -R -t httpd_sys_content_t 网站目录,或临时setenforce 0测试;g.防盗链——图片/资源防盗链,非本站引用返回403,解决:配置正确的防盗链规则或白名单。排查:看Nginx/Apache错误日志(403具体原因,如access forbidden by rule、directory index forbidden),检查文件权限和属主,检查封禁/认证规则,测试SELinux。解决:修正权限(644/755)和属主、上传index文件、解封IP、输入正确密码、修正SELinux上下文、调整防盗链。SSL和403错误影响网站访问和安全,配置正确的证书+权限+HTTPS,网站访问正常且安全。

技术评价:「网站错误排查核心是『看日志+从简单到复杂』。HTTP状态码是第一线索——4xx是客户端/请求问题(403权限、404不存在),5xx是服务器问题(500程序错、502/504网关/PHP-FPM、503服务不可用)。程序错误(白屏/上传/邮件/验证码/session)看PHP错误日志+测试功能定位。配置错误(DNS/SSL/伪静态/CDN)逐项核对配置。新手最容易犯的错是不看日志瞎猜、用记事本(BOM头)、改完不清缓存、权限设777。养成看日志的习惯,错误排查效率提升10倍」「给客户排查网站错误,标准流程:先看HTTP状态码→看服务器错误日志(Nginx/Apache/PHP/MySQL)→看最近修改(最近改了什么?回滚测试)→默认主题/禁用插件→检查配置(数据库/伪静态/SSL/权限)→测试环境复现。90%的错误能在30分钟内定位,剩下10%是复杂问题(数据库损坏/被黑/服务器硬件)需要深入排查」。

安全提醒:网站错误排查时注意安全——1.生产环境不要长期开启display_errors(会向访客暴露文件路径/数据库信息/代码结构,被黑客利用),临时开启排查后立即关闭(php.ini display_errors=Off,错误记录到日志即可);2.不要在生产环境直接改代码调试(容易改错导致网站更严重问题),先备份,小步修改,或在测试环境调试;3.排查被黑/木马时不要直接删除可疑文件(先备份取证,可能删错正常文件,也可能删了木马但留了后门),先扫描识别再清理;4.修改服务器配置(Nginx/PHP/MySQL)前备份配置文件,改完nginx -t/php -m测试再重载,配置错误会导致网站无法启动;5.数据库操作(修复/优化/导入导出)前备份数据库,误操作可能丢数据;6.不要把错误日志/备份文件放在Web可访问目录(可能被下载泄露敏感信息),放网站目录外或设置禁止访问;7.排查过程中发现安全漏洞(弱密码/上传漏洞/注入)及时修复,不要只解决当前错误忽略安全隐患;8.大改(批量替换/改数据库/升级程序)在低峰期操作,开维护模式,出问题立即回滚。

网站404错误排查_页面不存在原因与修复方案

标签:

更新时间:2026-08-26 23:53:31

上一篇:企业展示站SSL运维分享:网站强制HTTP跳转HTTPS的Nginx服务器301重定向配置

下一篇:宝塔面板CDN切换网站迁移?宝塔面板cdn切换网站迁移配置,零 downtime 方案