V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
hr6r
V2EX  ›  程序员

做web 到底用绝对路径还是相对路径?

  •  
  •   hr6r ·
    hr6r · 2013-03-21 15:01:07 +08:00 · 5210 次点击
    这是一个创建于 4300 天前的主题,其中的信息可能已经有所发展或是发生改变。
    有几个疑惑, 不知道大家通常是怎么做的.


    比如, 我的tomcat 下跑两个webapp, /a 和 /b.

    那么, 大家是写 href="/a/foo/bar"(绝对路径) 还是 "foo/bar"(相对路径)?


    0, 在html 和js 里, 如果用相对路径("foo/bar"), ie 就不支持了.
    1, 于是, 在/a 的html 里面加 <base href="/a/" />, 这样, html 里面的 "foo/bar"(相对路径) 就可以了.
    2, 但是, js 里面的 "foo/bar"(相对路径) 还是不行(ie).
    3, 于是, 在js里面给每个url 都加上一个$(base).attr('href')来组成绝对路径.

    我觉得不是很优雅, 不知道各位都是怎么做的?
    难道用绝对路径 ("/a/foo/bar")?
    25 条回复    1970-01-01 08:00:00 +08:00
    kstsca
        1
    kstsca  
       2013-03-21 15:06:26 +08:00
    这样写 xxxx.com/a/a
    hr6r
        2
    hr6r  
    OP
       2013-03-21 15:16:37 +08:00
    @kstsca
    谢谢, 不过, 难道这两个网站上线后, url 是这样的?
    aaa.com/a/foo/bar
    bbb.com/b/foo/bar
    kstsca
        3
    kstsca  
       2013-03-21 15:20:37 +08:00
    是的,就应该这样的。

    在本地的话 可以做127.0.0.1 host指向 调试
    hr6r
        4
    hr6r  
    OP
       2013-03-21 15:28:10 +08:00
    @kstsca
    -_-!!!

    不应该这样把?

    这样才对把?
    aaa.com/foo/bar
    bbb.com/foo/bar
    momou
        5
    momou  
       2013-03-21 23:25:28 +08:00
    不是/foo/bar ?
    Sdhjt
        6
    Sdhjt  
       2013-03-22 00:57:02 +08:00
    跨项目用绝对路径就好,方便省事。
    chunshuai
        7
    chunshuai  
       2013-03-22 09:43:37 +08:00
    这个要跟当前项目状况 决定的
    hr6r
        8
    hr6r  
    OP
       2013-03-22 09:49:49 +08:00
    @momou 这个在ie 下会变成 aaa.com/foo/bar , 而app context 是 aaa.com/a/, 所以访问不到.
    hr6r
        9
    hr6r  
    OP
       2013-03-22 09:53:49 +08:00
    @Sdhjt 绝对路径修改起来麻烦啊, 比如开发时 context 是 /a, 上线后想做去 /demo, 那岂不是要全部改动?
    hr6r
        10
    hr6r  
    OP
       2013-03-22 09:54:02 +08:00
    @chunshuai 愿闻其详
    momou
        11
    momou  
       2013-03-22 10:05:27 +08:00
    66beta
        12
    66beta  
       2013-03-22 10:07:29 +08:00
    <head>里写死呢
    hr6r
        13
    hr6r  
    OP
       2013-03-22 10:09:54 +08:00
    @momou 上线前呢....
    hr6r
        14
    hr6r  
    OP
       2013-03-22 10:14:19 +08:00
    @66beta 嗯, 你是指那些 script/ style 吧?
    我指的是还有其他页面中的链接要怎么处理比较好.
    66beta
        15
    66beta  
       2013-03-22 10:16:16 +08:00
    @hr6r 我想说的是<base>,个人不是很喜欢这个东西
    momou
        16
    momou  
       2013-03-22 10:19:34 +08:00
    @hr6r tomcat没用过,但肯定是要配合HOST设置aaa.com指向/a,bbb.com指向/b,调试的时候分别访问aaa.com/bbb.com,而不是127.1
    hr6r
        17
    hr6r  
    OP
       2013-03-22 10:25:22 +08:00
    @66beta 嗯, base 可以解决html 中的问题, 但是js 里面如果写相对路径还是不行(ie).
    hr6r
        18
    hr6r  
    OP
       2013-03-22 10:28:03 +08:00
    @momou ok, so 还是用绝对路径, 但是不带context...
    hmm... 我想想...
    jiazhoulvke
        19
    jiazhoulvke  
       2013-03-22 12:52:08 +08:00
    在配置文件里用变量保存绝对路径的地址不就好了?
    greatghoul
        20
    greatghoul  
       2013-03-22 13:21:40 +08:00
    我通过都是写一个动态的 js 文件,里面定义了常用的一些路径

    SITEENV = {
    ROOT: '<% ... %>',
    ...
    };

    然后 js 中引用。

    项目上线时,给这个文件做个缓存。
    sobigfish
        21
    sobigfish  
       2013-03-22 14:09:54 +08:00
    @greatghoul 这位这个。。。js引用的话的,cdn应该读不到吧。。
    @hr6r 所以考虑cdn cache的话,貌似还是绝对路径比较方便 链接 包括js css这些。
    firsthym
        22
    firsthym  
       2013-03-22 22:33:54 +08:00 via iPhone
    如果楼主用了一些web开发框架,我想这些都不是问题。
    srdrm
        23
    srdrm  
       2013-03-22 23:15:42 +08:00
    java web 开发难道不知道有 contextPath 这个东西?
    greatghoul
        24
    greatghoul  
       2013-03-23 00:09:38 +08:00
    @sobigfish 如果是JS文件中,将动态置在所有js上面,我想没有什么得不到的。如果是页面中,开发框架大多有方法直接拿到 url_root
    至于 CSS 嘛,大概不存在这样的问题,因为里面的资源都是相对css文件r的。
    1dian01
        25
    1dian01  
       2013-05-05 22:49:13 +08:00
    @hr6r 是否有空帮忙做个一个网站项目http://www.v2ex.com/t/67755#reply8
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2770 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 14:00 · PVG 22:00 · LAX 06:00 · JFK 09:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.