Я работаю над проектом веб-страницы. Я решил использовать для этого Apache, PHP (5.1.7, версию, наложенную моим поставщиком услуг) и Dwoo (templating).
Я хочу перенаправить URL-адреса на мои шаблоны. Я знаю, что существует много рамок, которые делают такие вещи. Мне просто интересно, есть ли хороший способ добиться этого.
Я создал свой проект следующим образом:
Существует минимальное количество бизнес-логики (нет реальной модели). Все это довольно статические страницы. Использование шаблонов упрощает работу по обслуживанию (наследование, т. Е.).
Любая идея, как настроить маршрутизацию в этом случае? Я предполагаю, что в идеале каждый заданный URL должен маршрутизировать через index.php, который затем каким-то образом решает, какой шаблон для рендеринга (т. Е. / Category / pagename будет отображаться в шаблонах / category / pagename.tpl).
Используйте 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.