本地localhost运行正常的代码部署至线上服务器出现404错误求助
这种本地跑完全正常,一部署到线上就404的情况我太熟悉了,多半是本地和服务器环境的细节差异导致的,给你几个具体的排查方向:
先揪出大小写问题:绝大多数线上服务器是Linux系统,文件名和路径严格区分大小写,但本地Windows/macOS默认是不区分的。比如你本地写的
/assets/MyScript.js,服务器上实际存的是/assets/myscript.js,这就直接触发404了。登录服务器用ls -l命令查看目标文件的真实名称,对比代码里的引用路径。核对文件权限:服务器上的文件或文件夹权限不对,Web服务器(Nginx、Apache这类)根本读不到文件。常规操作是给文件设
644权限,文件夹设755权限,确保Web服务的运行用户(比如www-data)有读取权限。用命令的话就是:chmod 644 /path/to/your/file chmod 755 /path/to/your/folder确认Web服务器的根目录配置:很多时候你以为的项目根目录和服务器配置的根目录不是一回事。比如你把代码传到了
/var/www/my-project,但Nginx配置里的root设成了/var/www,那访问时路径就得加上/my-project才能找到文件,不然就会404。去看看服务器的配置文件(比如Nginx的/etc/nginx/sites-available/your-site.conf),确认root指向的是不是你的项目根目录。看服务器错误日志找线索:别瞎猜,直接看Web服务器的错误日志,里面会清清楚楚记录404请求的具体路径。比如Nginx的日志在
/var/log/nginx/error.log,Apache的在/var/log/apache2/error.log,把日志里的请求路径和你服务器上的实际文件路径对比,差异一眼就能看出来。清理缓存试试:有时候是浏览器或者CDN缓存了旧的路径,导致请求的是不存在的资源。先强制刷新浏览器(Ctrl+F5),如果用了CDN服务,也手动清一下CDN的缓存,再测试看看。
检查相对路径的基准:如果代码里用的是相对路径(比如
./styles/main.css),要确保线上页面的URL层级和本地一致。比如本地是localhost:3000/posts,线上是your-domain.com/blog/posts,那相对路径的基准就变了,自然找不到文件。可以改成绝对路径(比如/styles/main.css)来规避这个问题。
内容的提问来源于stack exchange,提问作者hahaha1234

