2008-11-09 3 views
8

Я разрабатываю сайт 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.

Итак, как вы сохраняете каталог сайта независимым? Есть ли лучший/более чистый способ, чем те, с которыми я столкнулся?

ответ

8

Вы можете поместить в голове

<base href="<?php echo url::base(); ?>" /> 

Это будет означать, браузер будет запрашивать любые не абсолютные URL, по отношению к этому пути. Однако я не уверен, как это повлияет на URL-адреса, встроенные в файлы CSS и т. Д. Это не влияет на пути, определенные в файлах CSS. (спасибо mooware)

+0

В соответствии со спецификацией CSS URL-адреса в файлах CSS разрешены относительно пути к файлу, в котором они определены. Таким образом, базовый тег вообще не затрагивает их. Я попробовал, и это действительно так. – mooware 2009-08-28 02:33:02

1

tomhaigh имеет хороший момент, и было бы целесообразно исследовать его дальше.

Согласно MSDN, то base тег работает для всех внешних источников, включая таблицы стилей, изображения и т.д.

1

Может быть, я что-то отсутствует, но вы не можете просто делать то, что я (и я думал, что все else) do/es? А именно поместить все ваши изображения, CSS, JavaScripts и т.д. в общем каталоге .: т.е.

/inc/images/ 
/inc/css/ 
/inc/javascript/ 
etc 

А потом ссылаться на них с базовыми-относительный URL, т.е.:

<img src="/inc/images/foo.jpg" /> 
etc 

?

2

<base> вещь будет работать, но вы должны помнить, что это повлияет на ваши теги <a>. Рассмотрим пример .:

<!-- this page is http://oursite.com/index.html --> 
<html> 
<head> 
    <base href="http://static.oursite.com/" /> 
</head> 
<body> 
    <img src="logo.gif" alt="this is http://static.oursite.com/logo.gif" /> 
    <a href="/login">this links to http://static.oursite.com/login which is not what we wanted. we wanted http://oursite.com/login</a> 
</body> 
</html> 

Если вы используете вызов функции PHP для создания ссылок, что не будет проблемой, как вы можете просто убедитесь, что он выплевывает абсолютный URL. Но если вы (или ваши дизайнеры) указали на теги <a>, то вы снова застряли с той же проблемой, только с <a> вместо <img>.

EDIT: Я должен добавить вышеприведенный параграф, предполагая, что вы обслуживаете изображения с другого имени хоста, как мы. Если вы этого не сделаете, то очевидно, что это не проблема.

+0

Было очень полезно, указывая субдомен на новый подкаталог - я использовал ваш ` 2015-11-17 10:17:34

 Смежные вопросы

  • Нет связанных вопросов^_^