```html 网站绝对路径 网站绝对路径 打开服务器上任何一个网站目录,网站你看到的绝对第一层文件夹就是根。网站绝对路径,网站就是绝对从根开始的完整地址,不依赖当前文件位置。网站举个例子,绝对我昨天帮同事排查一个图片不显示的网站问题,CSS里写着background: url(images/bg.png),绝对但那个CSS文件本身在/css/style.css,网站浏览器会去/css/images/bg.png找图,绝对当然找不到。网站改成/images/bg.png,绝对立刻正常。网站这就是绝对绝对路径和相对路径的差别——绝对路径永远从根出发,不跟你玩“我相对于谁”的网站游戏。 在HTML里写绝对路径,根目录通常用斜杠/表示。比如<img src="/logo.png">,浏览器会请求http://你的域名/logo.png。注意,这里不包含协议和域名,只从根开始。如果你写http://example.com/logo.png,那是完整URL,也叫绝对URL。但严格来说,网站绝对路径指的是服务器文件系统里的路径,比如/var/www/html/logo.png。这个区别在写后端代码时特别重要,PHP里$_SERVER['DOCUMENT_ROOT']拿到的是文件系统根,而$_SERVER['REQUEST_URI']是URL路径。混用会出大问题。 我见过一个最典型的坑:本地开发用相对路径一切正常,传到服务器就全挂。因为本地环境里,你的项目可能放在D:\work\project\,而服务器上在/home/user/public_html/。相对路径依赖当前文件位置,一旦目录结构变了,路径就断了。绝对路径从根写死,虽然不够灵活,但至少不会因为移动文件而失效。当然,写死也有代价——换域名或者改目录名,你得全局替换。 那到底什么时候用绝对路径?我的经验是:引用公共资源,比如全站统一的CSS、JS、logo,用绝对路径。因为这些文件位置固定,从根开始最稳。而引用同一目录下的图片,或者模板里的局部资源,相对路径更省事。另外,在CSS里引用字体文件,如果字体放在/fonts/,那就写url(/fonts/myfont.woff)。别用../fonts/,因为CSS文件一旦被移动到别的目录,相对路径就废了。 还有一个容易忽略的点:绝对路径在服务器端和客户端含义不同。客户端(浏览器)的绝对路径是URL路径,从网站根开始,比如/about/。服务器端(Node.js、PHP)的绝对路径是文件系统路径,从磁盘根开始,比如/var/www/site/about/。写代码时如果搞混,比如用fs.readFile('/about/index.html'),Node会去磁盘根目录找,而不是网站根。正确做法是用path.join(__dirname, 'about', 'index.html'),或者用process.cwd()拼。这个坑我踩过至少三次,每次都是半夜调代码,气得想砸键盘。 再讲个实际案例。之前有个项目用Nginx做反向代理,网站放在/data/www/,但Nginx配置里root指向/data/www/public。结果PHP里用$_SERVER['DOCUMENT_ROOT']拿到的是/data/www/public,而实际文件在/data/www/的上一级。这时候如果写绝对路径/data/www/uploads/,PHP能读到,但浏览器访问/uploads/却404,因为Nginx的根是public。解决办法是把上传目录放到public里面,或者用别名。这件事让我明白:绝对路径不是孤立的,它跟服务器配置、项目结构绑在一起。 最后说个实用技巧。如果你不确定当前环境的绝对路径是什么,在PHP里打印__DIR__或__FILE__,在Node里打印__dirname。别猜,直接看。我习惯在项目入口文件写一行echo __DIR__;,部署时看一眼,心里有底。另外,用<base>标签可以改变相对路径的基准,但绝对路径不受影响。所以如果你想让全站链接都从根开始,又不想每个都写斜杠,可以在<head>里加<base href="/">。不过这个标签会影响锚点和表单提交,慎用。 路径这东西,说简单也简单,说麻烦能折腾一整天。核心就一句话:绝对路径从根开始,不依赖当前位置。但根是谁,取决于你在哪一层。浏览器里的根是域名,服务器里的根是磁盘。搞清楚这个,大部分路径问题都能自己解决。 ``` |