Я пытаюсь указать псевдоним пути к определенному файлу
Я попытался:
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]