【问题标题】:How to write simple routes in PHP如何在 PHP 中编写简单的路由
【发布时间】:2013-08-23 00:40:03
【问题描述】:

我正在使用Cloud9 IDE 开发一个项目,在 Apache 2.0 上运行 PHP5。我主要是一名前端开发人员,但我对 PHP 有很好的经验。我熟悉 MVC 框架,并且在较小程度上,这个功能是我试图模仿的,但更简单。我尝试实现 CakePHP,但发现它对于我需要的东西来说有点太健壮了——我不想要一个后端繁重的设置。我想为我的应用程序编写某种自定义类型的路由机制。

理想情况下,我希望对我网站的每个请求都通过一个页面(这个自定义“控制器”),然后我可以从那里编写自己的逻辑来找出适当的模板、http 代码、错误等,包括。我的问题是,我该如何做到这一点?换句话说,我如何通过 http://mysite.c9.io/index.phphttp://mysite.c9.io/user/view/2 发出请求,而不是尝试在我的服务器上请求 /user/view/2 目录?

我对@9​​87654325@ 和 .htaccess 规则有点熟悉,但我怀疑它们可能在这里发挥作用。

【问题讨论】:

    标签: php apache mod-rewrite url-routing


    【解决方案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 已启用,将其添加到您的Web 根目录/ 目录中的.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]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-17
      • 2018-08-25
      • 1970-01-01
      相关资源
      最近更新 更多