Страницы псевдонимов 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]