Маршрутизация 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
( источник)