Hai collegamenti relativi a root?


161

Esiste un modo per avere tutti i collegamenti in una pagina relativi alla directory principale?

Ad esempio, su www.example.com/fruits/apples/apple.htmlpotrei avere un link che dice:

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

Questo link punta a www.example.com/fruits/apples/fruits/index.htmlo www.example.com/fruits/index.html? Se il primo, c'è un modo per farlo puntare al secondo invece?

Risposte:


293

Un URL relativo alla radice inizia con un /carattere, per assomigliare a qualcosa <a href="https://stackoverflow.com/directoryInRoot/fileName.html">link text</a>.

Il link che hai pubblicato: <a href="fruits/index.html">Back to Fruits List</a>si collega a un file html situato in una directory denominatafruits , la directory si trova nella stessa directory della pagina html in cui appare questo link.

Per renderlo un URL relativo alla radice, modificalo in:

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

Modificato in risposta alla domanda, nei commenti, dall'OP:

Così facendo / lo renderà relativo a www.example.com, c'è un modo per specificare quale sia la radice, ad esempio cosa succede se voglio che la radice sia www.example.com/fruits in www.example.com/fruits/ mele / apple.html?

Sì, la prefazione dell'URL, negli attributi hrefo src, con a /renderà il percorso relativo alla directory principale. Ad esempio, data la pagina html in www.example.com/fruits/apples.html, il aof href="https://stackoverflow.com/vegetables/carrots.html"si collegherà alla pagina www.example.com/vegetables/carrots.html.

L' elemento basetag consente di specificare l'uri-base per quella pagina (anche se il basetag dovrebbe essere aggiunto a tutti pagina in cui era necessario per utilizzare una base specifica, per questo citerò semplicemente l'esempio del W3:

Ad esempio, date la seguente dichiarazione BASE e la dichiarazione 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>

l'URI relativo "../cages/birds.gif" risolverebbe a:

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

Esempio citato da: http://www.w3.org/TR/html401/struct/links.html#h-12.4 .

Letture consigliate:


1
Così facendo /renderà relative al www.example.com, c'è un modo per specificare che la radice è, ad esempio, che cosa se voglio la radice di essere www.example.com/fruitsin www.example.com/fruits/apples/apple.html?
Fai clic su Aggiorna

1
c'è un modo per trovarlo dinamicamente? Qualcosa come ~ in .NET? Cosa succederà se in ogni ambiente hai un nome di cartella diverso?
Kremena Lalova,

21

Uso

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

o

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

1
../path ha funzionato ma / path non ha funzionato per me in Expression Web utilizzandolo all'interno di un file CSS. (Il file era in / Directory e riferimento / DifferentDirectory
Clay Nichols il

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

3

Se si sta creando l'URL dal lato server di un'applicazione ASP.NET e si sta distribuendo il sito Web in una directory virtuale (ad es. App2) nel proprio sito Web, ad esempio http://www.yourwebsite.com/app2/

quindi basta inserire

<base href="~/" />

subito dopo il tag del titolo.

quindi ogni volta che usi root relative ad es

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

risolverebbe in " http://www.yourwebsite.com/app2/Accounts/Login "

In questo modo puoi sempre puntare ai tuoi file in modo relativamente assoluto;)

Per me questa è la soluzione più flessibile.


2
La tua risposta semplicemente non funziona. "tilde slash" funziona sul lato server nelle soluzioni ASP.NET. Questa domanda non riguarda le soluzioni ASP.NET sul lato server.
Anders Tornblad,

1
Vedo la tua teoria ma funziona, (sia in pratica che in teoria) Il server sostituisce la "barra tilde" con qualunque sia la radice della tua applicazione durante la generazione dell'HTML. L'hai provato prima?
A-Majeed,

Certo che l'ho provato. I server Web NON sostituiscono la barra tilde con la radice di un'applicazione. Solo le applicazioni ASP.NET fanno questo. In altri ambienti, non esiste un concetto come "applicazione".
Anders Tornblad,

No, non avrei dovuto dire che non utilizzo ASP.NET. Hai fatto questa ipotesi, ma non hai menzionato l'assunzione nella tua risposta. Inoltre, la domanda non menziona nulla sull'ambiente di runtime del server, quindi NON avresti dovuto supporre che la domanda riguardasse un ASP.NET. Se dai una risposta su StackOverflow, assicurati di rispondere alla domanda e non di un'altra domanda. Inoltre, ho detto che questa domanda non riguarda le soluzioni ASP.NET sul lato server.
Anders Tornblad,

Ha funzionato per me quando ho reso i collegamenti da javascript
Balaji Birajdar

0

Per dare un URL a un tag immagine che individua la images/directory nella radice come

`logo.png`

dovresti dare l' srcURL a partire da /come segue:

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

Questo codice funziona in qualsiasi directory senza problemi, anche se sei branches/europe/about.phpancora nel logo può essere visto proprio lì.


0

Usa questo codice "./" come root sul server come funziona per me

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

ma quando sei su un computer locale usa il seguente codice "../" come percorso relativo root

<a href="../fruits/index.html">Back to Fruits List</a>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.