Masz linki względem roota?

161

Czy istnieje sposób, aby wszystkie linki na stronie były względne w stosunku do katalogu głównego?

Na przykład, www.example.com/fruits/apples/apple.htmlmógłbym mieć link mówiący:

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

Czy ten link wskazywałby www.example.com/fruits/apples/fruits/index.htmllub www.example.com/fruits/index.html? Jeśli pierwszy, czy istnieje sposób, aby wskazywał na drugi?

Kliknij opcję Głos za
źródło

Odpowiedzi:

293

Adres URL względem katalogu głównego zaczyna się od /znaku, aby wyglądać jak <a href="https://stackoverflow.com/directoryInRoot/fileName.html">link text</a>.

Opublikowane łącze: <a href="fruits/index.html">Back to Fruits List</a>prowadzi do pliku html znajdującego się w katalogu o nazwiefruits , katalog znajdujący się w tym samym katalogu, co strona html, w której znajduje się ten link.

Aby ustawić go jako adres URL względem katalogu głównego, zmień go na:

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

Zredagowano w odpowiedzi na pytanie, w komentarzach, z OP:

Czyli / sprawi, że będzie to relatywne do www.example.com, czy istnieje sposób na określenie, czym jest root, np. Co zrobić, jeśli chcę, aby korzeń był www.example.com/fruits w www.example.com/fruits/ jabłka / apple.html?

Tak, poprzedzenie adresu URL w atrybutach hreflub srcznakiem a /spowoduje, że ścieżka będzie względna w stosunku do katalogu głównego. Na przykład, biorąc pod uwagę stronę html pod adresem www.example.com/fruits/apples.html, aof href="https://stackoverflow.com/vegetables/carrots.html"będzie prowadzić do tej stronywww.example.com/vegetables/carrots.html .

Element basetag pozwala określić podstawowy-uri dla tej strony (chociaż basetag musiałby być dodany do każdej strony, na której byłby potrzebny konkretny element bazowy, w tym celu zacytuję po prostu przykład W3:

Na przykład, biorąc pod uwagę następującą deklarację BASE i deklarację 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>

względny identyfikator URI „../cages/birds.gif” byłby następujący:

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

Przykład cytowany z: http://www.w3.org/TR/html401/struct/links.html#h-12.4 .

Sugerowane czytanie:

David mówi, że przywróć Monikę
źródło
1
Zatem zrobienie tego /spowoduje, że będzie to relatywne do www.example.com, czy istnieje sposób na określenie, czym jest root, np. Co jeśli chcę, aby był www.example.com/fruitsw nim www.example.com/fruits/apples/apple.html?
Kliknij „Za głosowaniem”
1
czy istnieje sposób, aby go dynamicznie znaleźć? Coś jak ~ w .NET? Co się stanie, jeśli w każdym środowisku będziesz mieć inną nazwę folderu?
Kremena Lalova
21

Posługiwać się

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

lub

<a href="../index.html">Back to Fruits List</a>
amit_g
źródło
1
../path działało, ale / path nie działał dla mnie w Expression Web, używając go w pliku CSS. (Plik był w / Directory and reference / DifferentDirectory
Clay Nichols
3
<a href="/fruits/index.html">Back to Fruits List</a>
moe
źródło
3

Jeśli tworzysz URL ze strony serwera wystąpienia aplikacji ASP.NET i wdrażania swoją stronę do katalogu wirtualnego (np app2) w witrynie tj http://www.yourwebsite.com/app2/

następnie po prostu włóż

<base href="~/" />

zaraz po tagu tytułowym.

więc za każdym razem, gdy używasz root-a, np

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

będzie oznaczać „ http://www.twojawitryna.com/app2/Accounts/Login

W ten sposób zawsze możesz względnie absolutnie wskazać swoje pliki;)

Dla mnie to najbardziej elastyczne rozwiązanie.

A-Majeed
źródło
2
Twoja odpowiedź po prostu nie działa. W rozwiązaniach ASP.NET po stronie serwera działa „ukośnik tyldy”. To pytanie nie dotyczy rozwiązań ASP.NET po stronie serwera.
Anders Tornblad
1
Widzę twoją teorię, ale DZIAŁA (zarówno w praktyce, jak i w teorii). Podczas generowania kodu HTML serwer zastępuje „ukośnik tyldy” tym, co jest katalogiem głównym aplikacji. Czy próbowałeś tego pierwszy?
A-Majeed,
Oczywiście, że próbowałem. Serwery WWW NIE zastępują ukośnika tyldą katalogiem głównym aplikacji. Robią to tylko aplikacje ASP.NET. W innych środowiskach nie ma pojęcia „aplikacja”.
Anders Tornblad
Nie, nie powinienem mówić, że nie używam ASP.NET. Zrobiłeś to założenie, ale nie wspomniałeś o tym w swojej odpowiedzi. Ponadto pytanie nie wspomina nic o środowisku wykonawczym serwera, więc nie powinieneś zakładać, że pytanie dotyczy ASP.NET. Jeśli udzielisz odpowiedzi na StackOverflow, upewnij się, że odpowiadasz na pytanie - a nie na inne pytanie. Powiedziałem też, że to pytanie nie dotyczy rozwiązań ASP.NET po stronie serwera.
Anders Tornblad
Pracowało dla mnie, kiedy renderowałem linki z javascript
Balaji Birajdar
0

Aby nadać adres URL znacznikowi obrazu, który lokalizuje images/katalog w katalogu głównym, na przykład

`logo.png`

powinieneś podać srcadres URL zaczynający się /od:

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

Ten kod działa w każdym katalogu bez żadnych problemów, nawet jeśli jesteś w nim branches/europe/about.phpnadal widać logo.

Tum Ozel Okullar
źródło
0

Użyj tego kodu „./” jako root na serwerze, ponieważ działa dla mnie

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

ale gdy jesteś na komputerze lokalnym, użyj następującego kodu „../” jako głównej ścieżki względnej

<a href="../fruits/index.html">Back to Fruits List</a>
king zecole
źródło