Имеете ссылки относительно root?


161

Есть ли способ, чтобы все ссылки на странице относились к корневому каталогу?

Например, у www.example.com/fruits/apples/apple.htmlменя может быть ссылка:

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

Эта ссылка будет указывать на www.example.com/fruits/apples/fruits/index.htmlили www.example.com/fruits/index.html? Если первое, есть ли способ указать на второе?

Ответы:


293

Корневой URL начинается с /символа, чтобы выглядеть примерно так <a href="https://stackoverflow.com/directoryInRoot/fileName.html">link text</a>.

Ссылка, которую вы опубликовали: <a href="fruits/index.html">Back to Fruits List</a>это ссылка на HTML-файл, расположенный в каталоге с именем fruits, каталог находится в том же каталоге, что и HTML-страница, на которой эта ссылка появляется.

Чтобы сделать его относительным корневым URL, измените его на:

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

Отредактировано в ответ на вопрос, в комментариях от ОП:

Таким образом, выполнение / сделает это относительно www.example.com, есть ли способ указать, что такое корень, например, что делать, если я хочу, чтобы корень был www.example.com/fruits в www.example.com/fruits/ яблоки / apple.html?

Да, если перед URL-адресом в атрибутах hrefили srcуказать /путь , то будет указан корневой каталог. Например, с учетом html-страницы в www.example.com/fruits/apples.html, aof href="https://stackoverflow.com/vegetables/carrots.html"будет ссылаться на страницу www.example.com/vegetables/carrots.html.

Элемент basetag позволяет вам указать base-uri для этой страницы (хотя baseтег должен был бы быть добавлен к каждой странице, на которой это было необходимо для использования определенной базы, для этого я просто приведу пример W3:

Например, с учетом следующей декларации BASE и декларации 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>

относительный URI "../cages/birds.gif" будет разрешен для:

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

Пример цитируется по адресу: http://www.w3.org/TR/html401/struct/links.html#h-12.4 .

Предлагаемое чтение:


1
Так делать /будет делать это относительно www.example.com, есть способ , чтобы определить , что корень, например , что , если я хочу корень , чтобы быть www.example.com/fruitsв www.example.com/fruits/apples/apple.html?
Нажмите Upvote

1
Есть ли способ найти его динамически? Что-то вроде ~ в .NET? Что произойдет, если в каждой среде у вас разные имена папок?
Кремена Лалова

21

использование

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

или

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

1
../path работал, но / путь не работал для меня в Expression Web, используя его в файле CSS. (Файл находился в / Каталог и ссылка / DifferentDirectory
Клей Николс


3

Если вы создаете URL из серверной части в ASP.NET приложения и развертывания вашего сайта в виртуальный каталог (например app2) на вашем сайте есть http://www.yourwebsite.com/app2/

затем просто вставьте

<base href="~/" />

сразу после тега заголовка.

поэтому всякий раз, когда вы используете корневой родственник, например,

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

решил бы " http://www.yourwebsite.com/app2/Accounts/Login "

Таким образом, вы всегда можете указывать на ваши файлы относительно-абсолютно;)

Для меня это самое гибкое решение.


2
Ваш ответ просто не работает. «Тильда слэш» работает на стороне сервера в решениях ASP.NET. Этот вопрос не о серверных решениях ASP.NET.
Андерс Торнблад

1
Я вижу вашу теорию, но она работает (как на практике, так и в теории). Сервер заменяет «косую черту» тем, что является корнем вашего приложения при генерации HTML. Вы пробовали это сначала?
A-Majeed

Конечно, я попробовал это. Веб-серверы НЕ заменяют косую черту на корень приложения. Только приложения ASP.NET делают это. В других средах нет такого понятия, как «приложение».
Андерс Торнблад

Нет, я не должен был говорить, что я не использую ASP.NET. Вы сделали это предположение, но не упомянули это предположение в своем ответе. Кроме того, в этом вопросе ничего не говорится о среде выполнения сервера, поэтому ВЫ не должны были предполагать, что речь идет о ASP.NET. Если вы даете ответ на StackOverflow, убедитесь, что вы отвечаете на вопрос, а не на какой-либо другой вопрос. Кроме того, я ДОЛЖЕН сказать, что этот вопрос не о серверных решениях ASP.NET.
Андерс Торнблад

Работал для меня, когда я делал ссылки из javascript
Баладжи Бирадждар

0

Чтобы дать URL для тега изображения, который находит images/каталог в корне, как

`logo.png`

Вы должны дать srcURL, начиная с /следующего:

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

Этот код работает в любых каталогах без каких-либо проблем, даже если вы все branches/europe/about.phpеще находитесь, логотип можно увидеть прямо здесь.


0

Используйте этот код "./" как root на сервере, так как он работает для меня

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

но когда вы находитесь на локальной машине, используйте следующий код "../" в качестве корневого относительного пути

<a href="../fruits/index.html">Back to Fruits List</a>
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.