Страницы псевдонимов apache, загружающие относительные ресурсы

Я пытаюсь псевдоним путь к определенному файлу

Я старался:

Alias /Console "/console/console.html"

Сейчас собираюсь http://example.com/Console действительно приносит console.html,

но любой относительный ресурс ссылается изнутри console.html (То есть, images\1.jpg) не удается, как кажется, перейти к document_root

Что я делаю неправильно?

1 ответ

Решение

Это проблема на стороне клиента, связанная с использованием вами относительных URL-адресов. Поскольку вы эффективно переписываете URL из /console/console.html в /Console любой относительный URL (к изображениям, CSS, JS и т. д.) теперь будет относиться к корню документа, а не к /console подкаталог.

Вам нужно либо "исправить" ваши относительные URL-адреса и сделать их корневыми (т.е. начинаться с косой черты, как в /console/images/1.jpg) или сделайте их абсолютными.

Кроме того, вы можете включить base элемент в head раздел вашего HTML-документа. Это относится к абсолютному URL, к которому относятся все относительные URL. Другими словами, так как вы ожидаете, что эти относительные URL будут относительно /console/console.html затем добавьте к head раздел:

<base href="http://example.com/console/console.html">

Теперь относительный URL, такой как images/1.jpg ссылка в документе по URL /Console будет запрашивать http://example.com/console/images/1.jpg не http://example.com/images/1.jpg,

Тем не менее, есть предостережения с использованием base элемент. Примечательно, что если у вас есть относительные ссылки на странице с использованием идентификаторов фрагментов, например, href="#some-id", Это также теперь относительно вашего base элемент, так что ссылка на странице может быть сломана. Единственный способ обойти это - полностью квалифицировать ссылку.

Ссылка:
https://developer.mozilla.org/en-US/docs/Web/HTML/Element/base


Тем не мение, Alias не является правильной директивой для использования при отображении в один файл, так как Alias соответствие префикса, так /Console/foo будет отображаться в /console/console.html/foo также. Вы могли бы возможно использовать AliasMatch вместо:

AliasMatch ^/Console$ /console/console.html

Это будет только карта /Console,

Или вы можете вместо этого использовать mod_rewrite и выполнить внутреннюю перезапись. (В отличие от внешнего перенаправления, которое в противном случае изменило бы URL-адрес и заставило бы клиента выполнить второй запрос.) Например:

RewriteEngine On
RewriteRule ^/?Console$ /console/console.html [L]
Другие вопросы по тегам