2011-11-29 4 views
18

私たちはすべて相対パスをよく知っています。./images/hello.jpgへの相対パスはhttp://www.domain.com/heyからhttp://www.domain.com/hey/images/hello.jpgにリンクしています。相対パスですが、ポートのためのものですか?

問題:http://www.domain.com/heyにいるときの相対パスをhttp://www.domain.com:1234に設定するにはどうすればよいですか?

+0

私はあなたができるとは思いません。この文脈では、ポートは実質的にドメイン名の一部です。ポートなしで(相対リンクを使用せずに)ドメイン名を指定することによって、基本的に_different_ドメインを提供します。 –

+1

http://stackoverflow.com/q/6016120/60075 –

答えて

20

これは、JavaScriptを使用してwindow.location.portプロパティを設定することで実現できます。相対URLで:(ポート一部すなわちホスト)

<a href="#" onclick="javascript:window.location.port=8080">go</a> 
+0

も参照してください...ただし、JavaScriptのみです。例えば、相対的なStyleSheet-pathを作るようにしてください。 –

+0

質問がどのコンテキストに当てはまるかを100%確かめることはできませんが、同じポートからCSSを提供することができます。相対パスは相対パスになります。 – peterp

+0

@Julien:私の文脈の仮定は正しいと思います。 – peterp

2

簡易回答:。 ホストが変更された場合、絶対パスを使用する必要があります。

18

あなたが権威のどの部分を変更することはできません。 相対URLの解釈方法については、section 5.2.2RFC 3986に記載されているアルゴリズムを参照してください。注目すべき重要なことは、権限は単にベースURLからコピーされるか、解決されるURLからコピーされ、権限の構造は決して解釈されないということです。これは、ポート部分を含むその部分を変更できないことを意味します。ここで

RFCからコピーした擬似コードにおけるアルゴリズムです:

-- The URI reference is parsed into the five URI components 
    -- 
    (R.scheme, R.authority, R.path, R.query, R.fragment) = parse(R); 

    -- A non-strict parser may ignore a scheme in the reference 
    -- if it is identical to the base URI's scheme. 
    -- 
    if ((not strict) and (R.scheme == Base.scheme)) then 
    undefine(R.scheme); 
    endif; 

    if defined(R.scheme) then 
    T.scheme = R.scheme; 
    T.authority = R.authority; 
    T.path  = remove_dot_segments(R.path); 
    T.query  = R.query; 
    else 
    if defined(R.authority) then 
     T.authority = R.authority; 
     T.path  = remove_dot_segments(R.path); 
     T.query  = R.query; 
    else 
     if (R.path == "") then 
      T.path = Base.path; 
      if defined(R.query) then 
       T.query = R.query; 
      else 
       T.query = Base.query; 
      endif; 
     else 
      if (R.path starts-with "/") then 
       T.path = remove_dot_segments(R.path); 
      else 
       T.path = merge(Base.path, R.path); 
       T.path = remove_dot_segments(T.path); 
      endif; 
      T.query = R.query; 
     endif; 
     T.authority = Base.authority; 
    endif; 
    T.scheme = Base.scheme; 
    endif; 

    T.fragment = R.fragment; 
+0

この問題についての決定的な回答をありがとう! –

-5

単にあなたがhref属性に書くことができます。

/:port/[path/]file.ext 
関連する問題