2013-08-23 2 views
1

Я работаю над проектом, используя Cloud9 IDE, работающий на PHP5 на Apache 2.0. Я в первую очередь разработчик, но у меня есть достойный опыт работы с PHP. Я знаком с структурами MVC, и в меньшей степени эта функциональность - это то, что я пытаюсь подражать, но проще. Я попытался внедрить CakePHP, но обнаружил, что он был слишком сильным для того, что мне было нужно - я не хочу использовать мощную настройку. Я хочу написать собственный механизм маршрутизации для моего приложения.Как написать простые маршруты в PHP

В идеале, я хотел бы, чтобы каждый запрос на мой сайт проходил через одну страницу (этот пользовательский «Контроллер»), и оттуда я могу написать свою собственную логику, чтобы выяснить соответствующие шаблоны, http-коды, ошибки и т. Д. , включать. Мой вопрос: как мне это сделать? Другими словами, как мне сделать запрос на http://mysite.c9.io/user/view/2, пройдите по каналу через http://mysite.c9.io/index.php, а не попробуйте запросить каталог /user/view/2 на моем сервере?

Я смутно знаком с правилами mod_rewrite и .htaccess, но я подозреваю, что они могут сыграть здесь свою роль.

ответ

1

Сначала убедитесь, что включен mod_rewrite. Проверьте файл httpd.conf для

LoadModule rewrite_module modules/mod_rewrite.so 

Убедитесь, что он не инвалид с # перед ним. Затем изменить корневой <Directory> настройки для

<Directory /> 
    Options All 
    AllowOverride All 
</Directory> 

Убедитесь, что вы измените все вхождения AllowOverride None в All. Затем перезапустите Apache.

Теперь, когда mod_rewrite включена, добавьте это к .htaccess файл в корневой каталог вашего веб / каталог

RewriteEngine on 
RewriteBase/

RewriteCond %{REQUEST_URI} !^/index\.php$ [NC] 
RewriteCond %{REQUEST_FILENAME} !-d # not a dir 
RewriteCond %{REQUEST_FILENAME} !-f # not a file 
RewriteRule^index.php [L] 

Это гарантирует, что каждый запрос, который в противном случае был бы 404 (что означает, что он исключает изображения, CSS , js и т. д.) теперь направляется через передний контроллер index.php. Некоторые системы управления контентом хотели бы добавить еще один код %{REQUEST_URI}, чтобы убедиться, что index.php используется только для обработки запросов, которые действительно ожидают рамки.

Joomla, например, добавляет следующее:

RewriteCond %{REQUEST_URI} /component/|(/[^.]*|\.(php|html?|feed|pdf|vcf))$ [NC] 
Смежные вопросы