游客发表
发布网站后,发布你打开FTP客户端,网站文件看着服务器上那一排排目录,发布心里踏实得很。网站文件但有个文件夹,发布你翻遍整个网站根目录也找不到——那就是网站文件你本地项目里那个叫assets的文件夹。你明明上传了它,发布对吧?网站文件
事实是,你上传的发布不是assets,而是网站文件assets里的内容。FTP工具或服务器端的发布解压程序,在你拖拽或解压时,网站文件悄悄把文件夹外壳剥掉了。发布你本地是网站文件assets/css/style.css,服务器上就变成了css/style.css。发布如果你在代码里引用的是/assets/css/style.css,页面样式就全崩了——白底黑字,像是回到了1998年。
这事我踩过坑。去年帮朋友改一个WordPress主题,他坚持说上传了完整的wp-content文件夹,但后台就是报错找不到样式表。我SSH上去一查,根目录下躺着themes、plugins、uploads,唯独没有wp-content这个壳。他本地打包时用Mac的“压缩”功能,解压后自动合并了同名目录,把外层文件夹吃掉了。不是他蠢,是工具太“聪明”。
另一个不可能存在的文件夹叫public_html——在服务器上,它是你的网站根目录,但你在浏览器里访问https://你的域名/public_html/index.html,十有八九会404。因为服务器配置里,public_html已经映射到/,它本身变成透明层,物理存在但逻辑上不可见。你上传文件时如果建了个public_html的子文件夹,那才是真灾难——内容会被塞进一个永远无法通过URL访问到的位置。
还有node_modules。这东西在本地能占几百MB,但发布网站后,服务器上根本不需要它。如果你用构建工具打包,最终产物是dist或build文件夹,里面已经把所有依赖压缩进几个JS和CSS文件了。node_modules就算你硬传上去,也没人访问它——除非你写了个require语句指向它,那说明你压根没构建,直接扔源码上服务器了。这种操作,服务器会回敬你一堆红色报错。
最迷惑的是.git文件夹。你本地有,服务器上也可能有——但如果你用Git做部署,服务器上那个.git是仓库克隆体,不是你的工作副本。你手动改文件后,git status会显示一堆删除和修改,但如果你直接编辑服务器上的文件而不提交,这些改动就悬在半空。更糟的是,如果服务器暴露了.git目录,别人能通过/.git/config下载你的仓库历史,泄露数据库密码或API密钥。所以正规部署流程会删除它,或者用.gitignore排除。
说到底,这些“不可能存在”的文件夹,根因是本地文件系统层次和服务器HTTP根目录层次之间的错位。你在本地觉得天经地义的路径,到服务器上就成了多余的壳。下次上传前,先看看你的构建配置里publicPath或baseUrl怎么写的——那才是决定服务器上文件夹能否被访问的裁判。别问我是怎么知道的。
友情链接