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