Маршрутизация URL в PHP - PullRequest
8 голосов
/ 23 мая 2011

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

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

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

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

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

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

Ответы [ 3 ]

10 голосов
/ 23 мая 2011

Используйте 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]
2 голосов
/ 22 мая 2015

Как тролль (+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 ( источник )

1 голос
/ 23 мая 2011

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

...