Маєте посилання відносно кореня?


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, по aпо href="https://stackoverflow.com/vegetables/carrots.html"бажанню посилання на сторінку www.example.com/vegetables/carrots.html.

Елемент baseтегу дозволяє вказати базовий uri для цієї сторінки (хоча baseтег повинен бути доданий до кожної сторінки, на якій потрібно було використовувати конкретну базу, для цього я просто наведу приклад W3:

Наприклад, з урахуванням наступних декларацій BASE та декларації:

<!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
чи є спосіб динамічно її знайти? Щось на зразок ~ in .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
Clay Nichols


3

Якщо ви створюєте URL-адресу з боку сервера програми ASP.NET і розгортаєте свій веб-сайт у віртуальному каталозі (наприклад, app2) на своєму веб-сайті, тобто http://www.yourwebsite.com/app2/

тоді просто вставити

<base href="~/" />

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

тому щоразу, коли ви використовуєте кореневий родич, наприклад

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

буде вирішено " http://www.yourwebsite.com/app2/Accounts/Login "

Таким чином, ви завжди можете вказувати на свої файли відносно абсолютно;)

Для мене це найбільш гнучке рішення.


2
Ваша відповідь просто не працює. "tilde slash" працює на стороні сервера в рішеннях ASP.NET. Це питання не стосується рішень ASP.NET на стороні сервера.
Андерс Торнблад

1
Я бачу вашу теорію, але вона спрацьовує (як на практиці, так і в теорії). Сервер замінює "нахил нахилу" тим, що є коренем вашої програми при створенні HTML. Ви спробували спочатку?
A-Majeed

Звичайно, я спробував це. Веб-сервери НЕ замінюють косу рису нахилу на корінь програми. Це роблять лише програми ASP.NET. В інших середовищах не існує такого поняття, як "додаток".
Андерс Торнблад

Ні, я не повинен говорити, що не використовую ASP.NET. Ви зробили це припущення, але не згадали припущення у своїй відповіді. Крім того, у цьому питанні нічого не згадується про середовище виконання сервера, тому ВАС не повинен був вважати, що питання стосується ASP.NET. Якщо ви даєте відповідь на StackOverflow, переконайтесь, що ви відповіли на це запитання - а не на якесь інше питання. Крім того, я DID заявляю, що це питання не стосується рішень ASP.NET на стороні сервера.
Андерс Торнблад

Працював для мене, коли я
робив

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.