Маршрутизация URL-адресов в PHP

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

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

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

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

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

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

Solutions Collecting From Web of "Маршрутизация URL-адресов в PHP"

Используйте mod_rewrite чтобы 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 чтобы 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 ( source )

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