• 请不要在回答技术问题时复制粘贴 AI 生成的内容
hr6r
5.18D
V2EX  ›  程序员

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

  •  
  •   hr6r ·
    hr6r · Mar 21, 2013 · 5747 views
    This topic created in 4817 days ago, the information mentioned may be changed or developed.
    有几个疑惑, 不知道大家通常是怎么做的.


    比如, 我的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 replies    1970-01-01 08:00:00 +08:00
    kstsca
        1
    kstsca  
       Mar 21, 2013
    这样写 xxxx.com/a/a
    hr6r
        2
    hr6r  
    OP
       Mar 21, 2013
    @kstsca
    谢谢, 不过, 难道这两个网站上线后, url 是这样的?
    aaa.com/a/foo/bar
    bbb.com/b/foo/bar
    kstsca
        3
    kstsca  
       Mar 21, 2013
    是的,就应该这样的。

    在本地的话 可以做127.0.0.1 host指向 调试
    hr6r
        4
    hr6r  
    OP
       Mar 21, 2013
    @kstsca
    -_-!!!

    不应该这样把?

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

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

    然后 js 中引用。

    项目上线时,给这个文件做个缓存。
    run2
        21
    run2  
       Mar 22, 2013
    @greatghoul 这位这个。。。js引用的话的,cdn应该读不到吧。。
    @hr6r 所以考虑cdn cache的话,貌似还是绝对路径比较方便 链接 包括js css这些。
    firsthym
        22
    firsthym  
       Mar 22, 2013 via iPhone
    如果楼主用了一些web开发框架,我想这些都不是问题。
    srdrm
        23
    srdrm  
       Mar 22, 2013
    java web 开发难道不知道有 contextPath 这个东西?
    greatghoul
        24
    greatghoul  
       Mar 23, 2013
    @sobigfish 如果是JS文件中,将动态置在所有js上面,我想没有什么得不到的。如果是页面中,开发框架大多有方法直接拿到 url_root
    至于 CSS 嘛,大概不存在这样的问题,因为里面的资源都是相对css文件r的。
    1dian01
        25
    1dian01  
       May 5, 2013
    @hr6r 是否有空帮忙做个一个网站项目http://www.v2ex.com/t/67755#reply8
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   868 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 54ms · UTC 20:19 · PVG 04:19 · LAX 13:19 · JFK 16:19
    ♥ Do have faith in what you're doing.