Tendo links em relação à raiz?

161

Existe uma maneira de ter todos os links em uma página em relação ao diretório raiz?

Por exemplo, www.example.com/fruits/apples/apple.htmleu poderia ter um link dizendo:

<a href="fruits/index.html">Back to Fruits List</a>

Este link estaria apontando para www.example.com/fruits/apples/fruits/index.htmlou www.example.com/fruits/index.html? Se o primeiro, existe uma maneira de apontar para o segundo?

Click Voto a favor
fonte

Respostas:

293

Um URL relativo à raiz começa com um /caractere, para se parecer com isso <a href="https://stackoverflow.com/directoryInRoot/fileName.html">link text</a>.

O link que você postou: <a href="fruits/index.html">Back to Fruits List</a>está vinculado a um arquivo html localizado em um diretório chamado fruits, o diretório estando no mesmo diretório da página html em que esse link aparece.

Para torná-lo um URL relativo à raiz, altere-o para:

<a href="/fruits/index.html">Back to Fruits List</a>

Editado em resposta à pergunta, nos comentários, do OP:

Assim, fazendo / será relacionado a www.example.com, existe uma maneira de especificar qual é a raiz, por exemplo, e se eu quiser que a raiz seja www.example.com/fruits em www.example.com/fruits/ maçãs / apple.html?

Sim, o prefixo da URL, nos atributos hrefou src, com a /tornará o caminho relativo ao diretório raiz. Por exemplo, dada a página html em www.example.com/fruits/apples.html, a ade href="https://stackoverflow.com/vegetables/carrots.html"link para a página www.example.com/vegetables/carrots.html.

O elemento basetag permite que você especifique a base-uri para essa página (embora a basetag deva ser adicionada a todas as páginas nas quais foi necessário o uso de uma base específica, para isso, citarei simplesmente o exemplo do W3:

Por exemplo, dada a seguinte declaração BASE e declaração A:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
   "http://www.w3.org/TR/html4/strict.dtd">
<HTML>
 <HEAD>
   <TITLE>Our Products</TITLE>
   <BASE href="http://www.aviary.com/products/intro.html">
 </HEAD>

 <BODY>
   <P>Have you seen our <A href="../cages/birds.gif">Bird Cages</A>?
 </BODY>
</HTML>

o URI relativo "../cages/birds.gif" resolveria para:

http://www.aviary.com/cages/birds.gif

Exemplo citado em: http://www.w3.org/TR/html401/struct/links.html#h-12.4 .

Leitura sugerida:

David diz para restabelecer Monica
fonte
1
Então, fazendo /o fará em relação ao www.example.com, há uma maneira para especificar o que a raiz é, por exemplo, o que se eu quiser a raiz para ser www.example.com/fruitsem www.example.com/fruits/apples/apple.html?
Click UpVote
1
existe uma maneira de encontrá-lo dinamicamente? Algo como ~ no .NET? O que acontecerá se em cada ambiente você tiver um nome de pasta diferente?
Kremena Lalova 29/07
21

Usar

<a href="/fruits/index.html">Back to Fruits List</a>

ou

<a href="../index.html">Back to Fruits List</a>
amit_g
fonte
1
../path funcionou, mas / path não funcionou para mim no Expression Web usando-o em um arquivo CSS. (O arquivo estava em / Diretório e referência / DifferentDirectory
Clay Nichols
3
<a href="/fruits/index.html">Back to Fruits List</a>
moe
fonte
3

Se você estiver criando a URL do lado do servidor de um aplicativo ASP.NET e implantando seu site em um diretório virtual (por exemplo, app2) no seu site, por exemplo, http://www.yourwebsite.com/app2/

então basta inserir

<base href="~/" />

logo após a tag title.

portanto, sempre que você usar o parente raiz, por exemplo

<a href="/Accounts/Login"/> 

resolveria " http://www.yourwebsite.com/app2/Accounts/Login "

Dessa forma, você sempre pode apontar para seus arquivos de forma relativamente absoluta;)

Para mim, esta é a solução mais flexível.

A-Majeed
fonte
2
Sua resposta simplesmente não funciona. "barra til" funciona no lado do servidor em soluções ASP.NET. Esta pergunta não é sobre soluções ASP.NET do lado do servidor.
Anders Tornblad 10/10
1
Entendo sua teoria, mas funciona (na prática e na teoria) O servidor substitui a "barra de til" por qualquer que seja a raiz do seu aplicativo ao gerar o HTML. Você já tentou isso primeiro?
A-Majeed
Claro que tentei. Os servidores da Web NÃO substituem a barra til pela raiz de um aplicativo. Somente aplicativos ASP.NET fazem isso. Em outros ambientes, não existe um conceito como "aplicativo".
Anders Tornblad
Não, eu não deveria ter que dizer que não uso o ASP.NET. Você fez essa suposição, mas não mencionou a suposição em sua resposta. Além disso, a pergunta não menciona nada sobre o ambiente de tempo de execução do servidor, portanto, você não deveria ter assumido que a pergunta era sobre um ASP.NET. Se você der uma resposta no StackOverflow, certifique-se de responder à pergunta - e não a alguma outra pergunta. Além disso, eu disse que essa pergunta não é sobre soluções ASP.NET do lado do servidor.
Anders Tornblad 14/10
Trabalhou para mim quando renderizei links de javascript
Balaji Birajdar
0

Para atribuir um URL a uma tag de imagem que localiza o images/diretório na raiz, como

`logo.png`

você deveria dar src URL começando com /o seguinte:

<img src="/images/logo.png"/>

Esse código funciona em qualquer diretório sem problemas, mesmo que você branches/europe/about.phpainda esteja no logotipo.

Tum Ozel Okullar
fonte
0

Use este código "./" como root no servidor, pois funciona para mim

<a href="./fruits/index.html">Back to Fruits List</a>

mas quando você estiver em uma máquina local, use o seguinte código "../" como o caminho relativo raiz

<a href="../fruits/index.html">Back to Fruits List</a>
rei zecole
fonte