我正在使用Cloud9 IDE开发一个项目,在Apache 2.0上运行PHP5。我主要是一名前端开发人员,但我有很好的PHP经验。我熟悉MVC框架,在较小程度上,这个功能是我试图模仿的,但更简单。我尝试实现CakePHP,但发现它对我需要的东西有点过于强大 - 我不想要后端繁重的设置。我想为我的应用程序编写一些自定义的路由机制。
理想情况下,我希望我的网站的每个请求都能通过一个页面(这个自定义的“控制器”),从那里我可以编写自己的逻辑来找出相应的模板,http代码,错误等,包括。我的问题是,我该如何实现这一目标?换句话说,如何通过http://mysite.c9.io/user/view/2
向http://mysite.c9.io/index.php
发出请求,而不是尝试在我的服务器上请求/user/view/2
目录?
我对mod_rewrite
和.htaccess规则模糊不清,但我怀疑他们可能会在这里发挥作用。
答案 0 :(得分: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]