Vous avez des liens relatifs à la racine?

161

Existe-t-il un moyen pour que tous les liens d'une page soient relatifs au répertoire racine?

Par exemple, sur www.example.com/fruits/apples/apple.htmlje pourrais avoir un lien disant:

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

Ce lien pointerait-il vers www.example.com/fruits/apples/fruits/index.htmlou www.example.com/fruits/index.html? Si c'est le premier, y a-t-il un moyen de le faire pointer vers le 2e à la place?

Cliquez sur Upvote
la source

Réponses:

293

Une URL relative à la racine commence par un /caractère, pour ressembler à quelque chose comme <a href="https://stackoverflow.com/directoryInRoot/fileName.html">link text</a>.

Le lien que vous avez posté: <a href="fruits/index.html">Back to Fruits List</a>est un lien vers un fichier html situé dans un répertoire nommé fruits, le répertoire étant dans le même répertoire que la page html dans laquelle ce lien apparaît.

Pour en faire une URL relative à la racine, remplacez-la par:

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

Édité en réponse à la question, dans les commentaires, de OP:

Donc, faire / le rendra relatif à www.example.com, y a-t-il un moyen de spécifier ce qu'est la racine, par exemple, que faire si je veux que la racine soit www.example.com/fruits dans www.example.com/fruits/ pommes / apple.html?

Oui, en précédant l'URL, dans les attributs hrefou src, avec un /rendra le chemin relatif au répertoire racine. Par exemple, compte tenu de la page html à www.example.com/fruits/apples.htmlla ade href="https://stackoverflow.com/vegetables/carrots.html"relieront à la page www.example.com/vegetables/carrots.html.

L' élément basetag vous permet de spécifier l'URI de base de cette page (bien que la basebalise doive être ajoutée à chaque page dans laquelle il était nécessaire d'utiliser une base spécifique, pour cela je citerai simplement l'exemple du W3:

Par exemple, étant donné la déclaration BASE et la déclaration A suivantes:

<!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 relatif "../cages/birds.gif" se résoudrait à:

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

Exemple cité de: http://www.w3.org/TR/html401/struct/links.html#h-12.4 .

Lecture suggérée:

David dit de réintégrer Monica
la source
1
Donc, faire /cela le rendra relatif www.example.com, y a-t-il un moyen de spécifier ce qu'est la racine, par exemple, que faire si je veux que la racine soit www.example.com/fruitsdans www.example.com/fruits/apples/apple.html?
Cliquez sur Upvote le
1
y a-t-il un moyen de le trouver dynamiquement? Quelque chose comme ~ dans .NET? Que se passera-t-il si dans chaque environnement vous avez un nom de dossier différent?
Kremena Lalova
21

Utilisation

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

ou

<a href="../index.html">Back to Fruits List</a>
amit_g
la source
1
../path fonctionnait mais / path ne fonctionnait pas pour moi dans Expression Web en l'utilisant dans un fichier CSS. (Le fichier était dans / Répertoire et référence / DifferentDirectory
Clay Nichols
3
<a href="/fruits/index.html">Back to Fruits List</a>
moe
la source
3

Si vous créez l'URL du côté serveur d'une application ASP.NET et que vous déployez votre site Web dans un répertoire virtuel (par exemple app2) dans votre site Web, par exemple http://www.yourwebsite.com/app2/

puis insérez simplement

<base href="~/" />

juste après la balise de titre.

donc chaque fois que vous utilisez root relatif, par exemple

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

se résoudrait à " http://www.yourwebsite.com/app2/Accounts/Login "

De cette façon, vous pouvez toujours pointer vos fichiers de manière relativement absolue;)

Pour moi, c'est la solution la plus flexible.

A-Majeed
la source
2
Votre réponse ne fonctionne tout simplement pas. "tilde slash" fonctionne côté serveur dans les solutions ASP.NET. Cette question ne concerne pas les solutions ASP.NET côté serveur.
Anders Tornblad
1
Je vois votre théorie mais cela fonctionne (à la fois en pratique et en théorie). Le serveur remplace le "tilde slash" par ce qui est la racine de votre application lors de la génération du HTML. L'avez-vous essayé en premier?
A-Majeed
Bien sûr, je l'ai essayé. Les serveurs Web ne remplacent PAS la barre oblique tilde par la racine d'une application. Seules les applications ASP.NET le font. Dans d'autres environnements, il n'existe pas de concept tel qu'une «application».
Anders Tornblad
Non, je ne devrais pas avoir à dire que je n'utilise pas ASP.NET. Vous avez fait cette hypothèse, mais vous n'en avez pas fait mention dans votre réponse. En outre, la question ne mentionne rien sur l'environnement d'exécution du serveur, vous n'auriez donc pas dû supposer que la question concernait un ASP.NET. Si vous donnez une réponse sur StackOverflow, assurez-vous de répondre à la question - et non à une autre question. De plus, j'ai dit que cette question ne concernait pas les solutions ASP.NET côté serveur.
Anders Tornblad
A travaillé pour moi lorsque j'ai rendu des liens à partir de javascript
Balaji Birajdar
0

Pour donner une URL à une balise d'image qui localise le images/répertoire à la racine comme

`logo.png`

vous devez donner une srcURL commençant par /:

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

Ce code fonctionne dans tous les répertoires sans aucun problème, même si vous êtes branches/europe/about.phptoujours dans le logo peut être vu juste là.

Tum Ozel Okullar
la source
0

Utilisez ce code "./" en tant que root sur le serveur car il fonctionne pour moi

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

mais lorsque vous êtes sur une machine locale, utilisez le code suivant "../" comme chemin relatif racine

<a href="../fruits/index.html">Back to Fruits List</a>
roi zécole
la source