我正在编写一个从URL获取数据的应用程序,但我想让它成为一个选项,无论用户是否使用“干净”网址(例如:http://example.com/hello/world)或“脏”网址(例如: http://example.com/?action=hello&sub=world)。
从两种URL方案中获取变量的最佳方法是什么?
答案 0 :(得分: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)。
我们最近将网站的大部分内容移动到了清理网址(仍支持较旧的“脏”网址),上述规则意味着我们无需重写任何依赖$_REQUEST
参数的代码,只有mod_rewrite规则。
<强>更新强>
Mod_rewrite是一个Apache模块,但也有许多选项available for IIS。
无论您决定支持哪种Web服务器,mod_rewrite方法都可能为您带来最少的工作量。没有它,您可能需要创建一大堆文件来模仿干净网址的结构,例如:在您的网络服务器根目录中,您将创建一个目录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都支持它,所以我强烈建议你朝那个方向努力!
答案 1 :(得分:1)
如果您的应用程序在Apache服务器上运行,我建议使用mod_rewrite。
基本上,您将应用程序编码为使用“脏”URL。我的意思是你仍然可以使用模板中的“干净”URL等,但在解析URL时使用“脏”版本。比如,你是真的,“diry”网址是www.domain.com/index.php?a=1&b=2,在你的代码里面你仍然会使用$ _GET ['a']和$ _GET [ 'b']。然后,凭借mod_rewrite的强大功能,只需将www.domain.com/1/2/这样的网址指向“脏”URL即可。 (这只是事情可以做的一个例子)
答案 2 :(得分:0)
听起来很痛苦,但我想创建一个分析每个请求的URL的函数。首先确定它是“脏”还是“干净”的URL。为此,我首先会寻找问号字符的存在并从那里继续(显然需要额外的检查)。对于“脏”URL,使用PHP的常规Get方法检索功能($ variable_name)。对于“干净”的,我会使用正则表达式。这将是解析URL并提取潜在变量的最灵活(最有效)的方法。
答案 3 :(得分:0)
快速而肮脏的方法可能只是检查GET变量。如果有,它是脏的,如果没有,它是干净的。当然,这取决于脏URL的确切含义。