Я разрабатываю сайт PHP, который использует маршрутизацию URL. Я хотел бы, чтобы сайт был независимым от каталога, чтобы его можно было перемещать из http://site.example.com/ в http://example.com/site/, не изменяя каждый путь в HTML. Проблема возникает, когда я связываюсь с файлами, которые не подлежат маршрутизации, например, css-файлы, изображения и т. Д.Как сохранить сайт с каталогом маршрутизации url независимо
Например, предположим, что вид действия index
контроллера welcome
содержит изображение img/banner.jpg
. Если страница запрашивается с адресом http://site.example.com/welcome, браузер запросит изображение как http://site.example.com/img/banner.jpg, что отлично. Но если страница запрашивается с адресом http://site.example.com/welcome/index, браузер подумает, что welcome
является каталогом и попытается получить изображение как http://site.example.com/welcome/img/banner.jpg, что, очевидно, неверно.
Я уже рассмотрел несколько вариантов, но все они кажутся несовершенными мне:
Использование перезаписи URL для перенаправления запросов от (* .css | * .js | ...) или (css/* | js/* | ...) на правильном пути.
Проблемы: Каждое расширение должно быть названо в правилах перезаписи. Если кто-то добавит новый тип файла (например, mp3-файл), он не будет перезаписан.
Подготовить базовый путь к каждому относительному пути с помощью php-функции. Например:
<img src="<?php echo url::base(); ?>img/banner.jpg" />
Проблемы: Выглядит грязно; css - и js -файлы, содержащие пути, должны обрабатываться PHP.
Итак, как вы сохраняете каталог сайта независимым? Есть ли лучший/более чистый способ, чем те, с которыми я столкнулся?
В соответствии со спецификацией CSS URL-адреса в файлах CSS разрешены относительно пути к файлу, в котором они определены. Таким образом, базовый тег вообще не затрагивает их. Я попробовал, и это действительно так. – mooware 2009-08-28 02:33:02