URL-маршрутизация в среде MVC - PHP - PullRequest
0 голосов
/ 08 апреля 2010

Я разрабатываю MVC-фреймворк на PHP с нуля; в основном для обучения, но это может легко закончиться живым проектом. Я прошел этот урок в качестве основы и расширил его оттуда.

Запросы выполняются так:

examplesite.com / controller / action / param1 / param2 / и так далее ...

А это мой файл .htaccess:

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ index.php?rt=$1 [L,QSA]

Таким образом, все запросы отправляются в index.php, и они направляются на правильный контроллер и действия оттуда. Если контроллер или действие не задано, для обоих значений предполагается использование индекса по умолчанию.

У меня есть контроллер индекса с действием index, который должен быть домашней страницей моего сайта. Я могу получить к нему доступ, перейдя на examplesite.com (поскольку предполагается, что индексная часть). Он имеет несколько изображений, ссылку на таблицу стилей и несколько скриптов. Они связаны с путями относительно index.php. Я думал, что это будет хорошо, так как все запросы идут в index.php, а весь контент просто включается в эту страницу с помощью php. Это работает, если я иду на examplesite.com. Я увижу все изображения и стили, и сценарии будут работать. Однако, если я перехожу на examplesite.com/index, я перенаправляюсь на правильную часть сайта, но все ссылки не работают. Браузер считает, что я в другой папке?

Я хотел бы иметь возможность использовать относительные пути для всего контента на моем сайте, потому что в противном случае мне нужно везде использовать абсолютные пути, чтобы убедиться, что что-то появится. Это возможно?

Ответы [ 2 ]

2 голосов
/ 08 апреля 2010

Вам нужен абсолютный путь, потому что браузеры оценивают относительные пути относительно текущего URI запроса (если вы не используете базовый тег, см. Ниже). Имейте в виду, что абсолютный путь не обязательно означает, что вам нужно включить в него доменное имя. Достаточно просто начать с косой черты. Это, так сказать, абсолютный путь относительно сервера.

Итак:

<img src="/images/bla.gif">

вместо

<img src="images/bla.gif">

... будет работать нормально.

Как я уже упоминал, другой подход заключается в использовании base tag . Но по причинам, которые я не могу вспомнить прямо сейчас, я считаю, что рекомендуется не использовать его. (Если кто-то еще хочет здесь звонить ...)

0 голосов
/ 08 апреля 2010

IMO-изображения, javascript, стили и другое статическое содержимое должны , а не быть частью системы маршрутизации.Это означает, что вы загружаете PHP для каждого запроса (снижение производительности), когда Apache может нормально обслуживать эти файлы.

Мой .htaccess всегда позволяет существующим файлам пропускать PHP:

# Files with an extension that exist are served up straight.
RewriteCond %{REQUEST_URI} \..+$
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule .* - [L]
...