Маршрутизация URL в PHP

Я работаю над проектом веб-страницы. Я решил использовать Apache, PHP (5.1.7, версия, навязанная моим поставщиком услуг) и Dwoo (шаблоны) для этой цели.

Я хочу направить URL на мои шаблоны. Я знаю, что есть много фреймворков, делающих подобные вещи. Мне просто интересно, есть ли хороший способ достичь этого без.

Я настроил свой проект следующим образом:

  • src / dwoo - файлы Dwoo
  • index.php - это должно обрабатывать маршрутизацию. В настоящее время он просто отображает главную страницу сайта с использованием шаблона.
  • шаблоны - шаблоны, которые представляют реальные страницы.

Существует минимальное количество бизнес-логики (без реальной модели). Это все просто статичные страницы. Использование шаблонов облегчает обслуживание (наследование, т.е.).

Есть идеи, как настроить маршрутизацию в этом случае? Я думаю, что в идеале каждый данный URL должен направляться через index.php, который затем каким-то образом решает, какой шаблон отображать (т.е. /category/pagename будет отображаться в templates/category/pagename.tpl).

3 ответа

Решение

Использование mod_rewrite направить все к одному index.php файл. Затем проверьте переменную в $_SERVER['REQUEST_URI'] в этом файле для отправки в требуемый обработчик.

Эта конфигурация позволит mod_rewrite, если он установлен:

DirectorySlash Off
Options FollowSymLinks Indexes
DirectoryIndex index.php

RewriteEngine on

RewriteCond %{REQUEST_FILENAME}  -d
RewriteRule  ^.*$  -  [L]

RewriteCond %{REQUEST_FILENAME}  -f
RewriteRule  ^.*$  -  [L]

RewriteRule ^.*$    index.php [L]

Вроде тролскн (+1) описывает:

использование mod_rewrite направить все к одному index.php файл. Затем проверьте переменную в $_SERVER['REQUEST_URI'] в этом файле для отправки в требуемый обработчик.

Но я нашел следующее .htaccess (помещается в папку с index.php который должен "потреблять" все после него) гораздо полезнее

Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]

Также я хотел бы отметить, что вы можете столкнуться с сообщением

.htaccess: Invalid command 'RewriteEngine', perhaps misspelled
or defined by a module not included in the server configuration

Это может быть легко решено с sudo a2enmod rewrite && sudo service apache2 restart ( источник)

Возможно, вы захотите использовать PEAR Net_URL_Mapper.

Другие вопросы по тегам