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

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

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

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

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

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

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

3 ответов


использовать mod_rewrite чтобы направить все к одному . Затем проверьте переменную в $_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]

как trolskn (+1) Описание:

использовать mod_rewrite чтобы направить все к одному . Затем проверьте переменную в $_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's Net_URL_Mapper.