分类: PHP
2015-09-10 11:27:05
FleaPHP 应用程序通过分析 URL 地址来确定要执行的控制器及动作,以及传递给动作方法的参数。
默认情况下,FleaPHP 应用程序通过
这样的 URL 地址来访问应用程序的每一个功能。但有时候你希望 URL 地址能够更好看一点,例如上面的地址变为:
或者
要实现上述两种效果,必须借助 FleaPHP 对 PATHINFO
模式和 URL
重写的支持。
PATHINFO
要使用 PATHINFO
模式来运行应用程序,只需要简单的设置应用程序选项 urlMode
为 URL_PATHINFO
就可以了。
FLEA::setAppInf('urlMode', URL_PATHINFO);
采用 PATHINFO
时,对于相对地址,必须改写为使用 /
开头的绝对地址。例如 css/style.css
应该写为/css/style.css
,而 images/banner.jpg
要写为 /images/banner.jpg
。除了图片、CSS 样式表和 JavaScript 文件外,对网站其他文件的引用也要使用绝对地址。
URL 重写
URL
重写比起 PATHINFO
来复杂得多,而且有一些限制。
-
目前 FleaPHP 对
URL
重写的支持还很简单,与 PATHINFO
相比仅仅是从 URL
地址中隐藏了 index.php
入口文件的名字;
-
URL 重写需要 Apache 的 mod_rewrite 模块支持(IIS 用户可以使用一些商业软件);
-
必须配置 Apache 或者
.htaccess
文件,以便启用 mod_rewrite 模块;
-
对于复杂的目录结构,你不得不编写更多的重写规则。
好了,希望上面的话没有吓到你。那么看看最简单的情况:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [L]
# 处理 css 子目录和 images 子目录
RewriteRule ^.*/(css/.+)$ $1 [L]
RewriteRule ^.*/(images/.+)$ $1 [L]
上面的重写规则很简单,首先是启用 URL 重写。然后是判断请求的文件是否已经存在。只有当请求的文件不存在时才进行 URL 重写。
如果有更多子目录,例如 flash
、scripts
等,只需要按照对 css
和 images
子目录的处理照搬即可。
把上述内容保存到应用程序根目录,文件名为 .htaccess
。
在 Windows 资源管理器里面不允许你建立 .htaccess 这样只有扩展名的文件。所以用记事本编写好内容后,保存时,文件名要输入为 ".htaccess"
(感谢 RainChen 提供的小技巧)。
或者先将文件保存为其他名字,例如 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。例如
可以用下面的地址来代替。不但好看,而且便于搜索引擎索引文件。