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