Назад | Перейти на главную страницу

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

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

Я попытался:

Alias /Console "/console/console.html"

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

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

Что я делаю не так?

Это проблема на стороне клиента, связанная с использованием относительных 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]