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

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

  •  
  •   hr6r ·
    hr6r · Mar 21, 2013 · 6213 views
    This topic created in 4980 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
    kstsca
    Mar 21, 2013
    1
    这样写 xxxx.com/a/a
    hr6r
    hr6r
    OP
    Mar 21, 2013
    2
    @kstsca
    谢谢, 不过, 难道这两个网站上线后, url 是这样的?
    aaa.com/a/foo/bar
    bbb.com/b/foo/bar
    kstsca
    kstsca
    Mar 21, 2013
    3
    是的,就应该这样的。

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

    不应该这样把?

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

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

    然后 js 中引用。

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