2008-12-31 135 views
1

我正在编写一个从URL获取数据的应用程序,但我想让它成为用户是否使用“干净”URL的应用程序(例如: http://example.com/hello/world)或“脏”的网址(例如:http://example.com/?action=hello&sub=world)。从“干净”和“脏”URL获取数据的最佳方式

从两种URL方案获取变量的最佳方式是什么?

+0

难道只有这两个选择吗?或者,您可以http:// http://example.com/hello?sub=world或http://example.com/world/hello?那么http://example.com/hello/world?action=somethingelse&sub=different呢? – 2008-12-31 19:14:06

回答

3

如果你的mod_rewrite有类似如下的规则:

RewriteRule ^hello/world /?action=hello&sub=world [NC,L] 

,或者更广义的:

// Assuming only lowercase letters in action & sub.. 
RewriteRule ^([a-z]+)/([a-z]+) /?action=$1&sub=$2 [NC,L] 

那么相同的PHP脚本被调用,与现有的$_REQUEST变量无论怎样用户访问该页面(脏或干净的URL)。

我们最近将我们网站的大部分内容移到了清理网址(仍然支持较旧的“脏”网址)和上述规则,这意味着我们不必重写任何依赖于params的代码,只有mod_rewrite规则。

更新

mod_rewrite的是一个Apache模块,但也有许多选项available for IIS也。

无论您决定支持哪种Web服务器,mod_rewrite方法都可能会为您带来最少的工作量。没有它,你可能需要创建一些文件来模仿你干净的URL的结构,例如在Web服务器的根你会创建一个目录hello,将文件放在world进去,含有类似如下:

// Set the $_REQUEST params to mimic dirty url 
$_REQUEST['action'] = 'hello'; 
$_REQUEST['sub'] = 'world'; 
// Include existing file so we don't need to re-do our logic 
// (assuming index.php at web root) 
include('../index.php'); 

当你想处理“干净地”增加参数的数量,于是将数您需要的目录和存根文件,这会大大增加您的维护负担。

mod_rewrite是专门为这类问题设计的,现在在IIS和Apache上都支持,所以我强烈建议朝这个方向发展!

+0

这里唯一的问题是我想支持的不仅仅是Apache,所以使用.htaccess不起作用。 – 2008-12-31 19:51:16

0

听起来很痛苦,但我想创建一个函数来分析每个请求的URL。首先确定它是否是“脏”或“干净”的URL。为此,我会首先查找问号字符的存在并从那里继续(显然需要额外检查)。对于“脏”URL,使用PHP的普通Get方法检索功能($ variable_name)。对于“干净”的,我会使用正则表达式。这将是解析URL并提取潜在变量的最灵活(且高效)的方式。

1

如果你的应用程序运行在Apache服务器上,我会建议使用mod_rewrite。

基本上,你编写的应用程序使用里面的“脏”的URL。我的意思是,你仍然可以在模板等中使用“干净”的URL,但在解析URL时使用“脏”版本。就像,你是真实的,“diry”的URL是www.domain.com/index.php?a=1 & b = 2,在你的代码里你仍然会使用$ _GET ['a']和$ _GET [ 'b']。然后,使用mod_rewrite的强大功能,只需将www.domain.com/1/2/这样的URL指向“脏”URL即可。(这只是一个事情如何完成的例子)

0

一个快速和肮脏的方法可能是简单地检查GET变量。如果有的话,它很脏,如果不是,它很干净。当然,这取决于您的脏网址究竟是什么意思。

相关问题