FleaPHP 开发指南 - A2. 使用 PATHINFO 和 URL 重写

开发指南

FleaPHP 应用程序通过分析 URL 地址来确定要执行的控制器及动作,以及传递给动作方法的参数。

默认情况下,FleaPHP 应用程序通过

http://www.example.com/index.php?controller=test&action=benchmark&source=1

这样的 URL 地址来访问应用程序的每一个功能。但有时候你希望 URL 地址能够更好看一点,例如上面的地址变为:

http://www.example.com/index.php/test/benchmark/source/1

或者

http://www.example.com/test/benchmark/source/1

要实现上述两种效果,必须借助 FleaPHP 对 PATHINFO 模式和 URL 重写的支持。



PATHINFO

要使用 PATHINFO 模式来运行应用程序,只需要简单的设置应用程序选项 urlMode 为 URL_PATHINFO 就可以了。

采用 PATHINFO 时,对于相对地址,必须改写为使用 / 开头的绝对地址。例如 css/style.css 应该写为 /css/style.css,而 images/banner.jpg 要写为 /images/banner.jpg。除了图片、CSS 样式表和 JavaScript 文件外,对网站其他文件的引用也要使用绝对地址。
这个要求同样适用于 URL 重写模式。



URL 重写

URL 重写比起 PATHINFO 来复杂得多,而且有一些限制。

  • 目前 FleaPHP 对 URL 重写的支持还很简单,与 PATHINFO 相比仅仅是从 URL 地址中隐藏了 index.php 入口文件的名字;
  • URL 重写需要 Apache 的 mod_rewrite 模块支持(IIS 用户可以使用一些商业软件);
  • 必须配置 Apache 或者 .htaccess 文件,以便启用 mod_rewrite 模块;
  • 对于复杂的目录结构,你不得不编写更多的重写规则。

好了,希望上面的话没有吓到你。那么看看最简单的情况:

RewriteEngine onRewriteCond %{REQUEST_FILENAME} !-fRewriteRule ^(.*)$ /index.php/$1 [L]

上面的重写规则很简单,首先是启用 URL 重写。然后是判断请求的文件是否已经存在。只有当请求的文件不存在时才进行 URL 重写。

把上述内容保存到应用程序根目录,文件名为 .htaccess。

很奇怪,在 Windows 资源管理器里面不允许你建立 .htaccess 这样只有扩展名的文件。所以你必须先将文件保存为其他名字,例如 app.htaccess。然后进入命令行窗口(通过开始菜单运行 cmd.exe 程序即可),输入 ren app.htaccess .htaccess 命令来对文件改名。

最后,修改应用程序设置的 urlMode 选项为 URL_REWRITE。



如何生成 URL 地址

在 FleaPHP 应用程序中,我们总是应该使用 url() 函数和 FLEA_Controller_Action::_url() 方法来生成 URL 地址。这样不管 urlMode 选项怎么设置,我们都可以确保应用程序生成可以工作的 URL 地址。

例如 url('test', 'benchmark', array('source' => 1)) 这样的调用,在不同 urlMode 设置下,生成的 URL 地址也不同。

这种特性,可以避免因为应用程序修改了 urlMode 选项,而导致需要手工替换全部 URL 地址的问题。



更复杂的自定义 URL 地址

正在开发的 URL 路由功能,可以让应用程序获得完全的自定义 URL。例如

http://www.example.com/index.php?controller=article&action=view&article_id=123

可以用下面的地址来代替。不但好看,而且便于搜索引擎索引文件。

http://www.example.com/article/123

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索文件
, url
, 应用程序
, 地址
, htaccess
, url地址
, 重写url分析
, pathinfo
, Pathinfo模式配置
, pathinfo模式
, 配置pathinfo模式
, pathinfo配置
, 重写模式
不支持pathinfo模式
pathinfo、php pathinfo、cgi.fix pathinfo、nginx pathinfo、thinkphp pathinfo,以便于您获取更多的相关知识。

时间: 2024-10-03 15:38:22

FleaPHP 开发指南 - A2. 使用 PATHINFO 和 URL 重写的相关文章

FleaPHP 开发指南 - 5. 应用程序设置

程序|开发指南 FleaPHP 是一个具有高度灵活性的框架.开发者可以用不同的设置来调整 FleaPHP 的工作方式.这些设置统一保存在名为"应用程序设置"的数据源中. 实际上,除了 FleaPHP 框架本身,应用程序也可以使用"应用程序设置"来保存应用程序运行时需要的各种设置. FleaPHP 的应用程序设置有一个默认配置文件,保存在 FLEA/Config/Default_APP_INF.php 中.应用程序可以在入口文件(例如 index.php)中修改这些设

FleaPHP 开发指南 - 8. 如何使用 RBAC 组件实现访问控制

访问|开发指南|控制 如何使用 RBAC 组件? 请务必更新到 1.0.60.553 版本以上,确保 RBAC 组件与文档中的描述相符合 RBAC 是英文(Role-Based Access Control)的缩写,也就是基于角色的访问控制.RBAC 的定义比较晦涩,我就以比较生动的形式来阐述什么是 RBAC. ATM 机的一天 假设有一台 ATM(自动提款机)放在街边,我们来看看这个 ATM 度过的一天. 早上,有一个家伙走到 ATM 面前,对着机器说:"芝麻开门,芝麻开门,给我 100 块!

FleaPHP 开发指南 - 7. 数据表关联

开发指南|数据 数据表关联是指两个或者多个数据表的记录之间的逻辑关系. 例如: 每一个公民都有一个身份证号码 每一位作者都写了多本(0-n)书籍,而每一本书籍都有多个(1-n)作者 每一篇文章都有多个(0-n)评论 每一个评论都属于一篇文章 目前,FleaPHP 支持四种类型的数据表关联,分别是: HAS_ONE: 当前表的每一条记录都拥有最多一条(0–1)关联记录 HAS_MANY: 当前表的每一条记录都拥有多条(0-n)关联记录 MANY_TO_MANY: 当前表的每一条记录都和其他表的多条

FleaPHP 开发指南 - 6. 访问数据库

访问|开发指南|数据|数据库 这一章我们就来看看 FleaPHP 的数据库访问功能.体验一下 FleaPHP 出色的自动化 CRUD 能力. 连接数据库 在 htdocs 目录中创建子目录 testDB,并在子目录下创建文件 test1.php 文件,内容如下: <?phprequire('../FLEA/FLEA.php');__FLEA_PREPARE();// 准备数据库连接信息$dsn = array( 'driver' => 'mysql', 'host' => 'localh

FleaPHP 开发指南 - 4. 命名规范和目录结构

规范|开发指南 FleaPHP 的命名规则和目录结构初看上去比较复杂,但习惯以后,你会发现这种命名规则带来许多好处.因此像 Zend Framework 也是采用同样的做法. 当然,FleaPHP 对于应用程序的命名规则和目录结构没有强制性要求.只不过采用一致的命名规则和目录结构,可以方便对应用程序维护.同时 FleaPHP 应用程序开发者之间也可以更容易的进行协作. 全局函数的命名规则 全局函数的命名规则是用"_"分隔全小写的单词.例如 get_cache().echo_h().同时

FleaPHP 开发指南 - 3. 应用程序入口

程序|开发指南 与许多开发框架一样,FleaPHP 通常也使用一个入口文件来启动框架,并运行应用程序代码.虽然 FleaPHP 并不要求应用程序必须使用单一的入口文件,不过在本系列文章中,我大部分时间都使用单一入口文件. 单一入口应用程序 在 FleaPHP 应用程序使用 MVC 模式时,应用程序的所有功能都通过一个单一的文件来调用.这种通过单一文件来执行所有功能的应用程序,称为单一入口应用程序.有关单一入口应用程序的一些信息,可以参考 ChinaUnix 上的一篇帖子. 许多著名的 PHP 应

nginx支持codeigniter的pathinfo模式url重写配置写法示例_nginx

开发环境 codeigniter 2.14 PHP 5.4.18 nginx 1.4.2 Codeigniter配置 打开 codeignite 的 config.php 文件修改如下: $config['uri_protocol'] = "PATH_INFO"; nginx配置 打开 nginx 的配置文件 nginx.conf 文件,修改如下: # 我使用的是虚拟主机配置 server { listen 80; server_name dev.example.com; rewrit

AJAX.NET用户开发指南(1)

ajax|开发指南 AJAX依靠服务器作为中介来分发和处理请求.为了完成这项工作,.net封装类依赖于客户端的请求对象,而xmlHttpRequest对象被大部分的浏览器支持,因此使用这个对象是一个不错的解决方案.因为封装的目的是隐藏xmlHttpRequest的实现,故我们不讨论他的实现细节. 封装类是通过在.net的方法上增加AJAX属性标记来实现的,一旦被标记,AJAX创建客户端的javascript函数(这类似于客户端编写的javascript函数),并使用xmlhttprequest创

AJAX.NET用户开发指南

ajax|开发指南 概述 AJAX依靠服务器作为中介来分发和处理请求.为了完成这项工作,.net封装类依赖于客户端的请求对象,而xmlHttpRequest对象被大部分的浏览器支持,因此使用这个对象是一个不错的解决方案.因为封装的目的是隐藏xmlHttpRequest的实现,故我们不讨论他的实现细节. 封装类是通过在.net的方法上增加AJAX属性标记来实现的,一旦被标记,AJAX创建客户端的javascript函数(这类似于客户端编写的javascript函数),并使用xmlhttpreque