获取变量和漂亮的网址

时间:2010-03-11 03:29:53

标签: php url get

我认为这是一个noob问题,但是这里有。

我试图在PHP中更好地理解$ _GET变量。许多CMS等将诸如site.com/?ID=42之类的内容转换为类似site.com/42

的内容

我的问题是,当发生这种情况时,$ _GET变量会发生什么?我尝试在页面加载时打印GET数组,它是空的。

4 个答案:

答案 0 :(得分:3)

他们这样做的方法是使用mod_rewrite

基本上你有网络服务器“重写”URI请求到其他东西,所以你有传入的请求,如

http://your.site.com/Page/arg1/arg2/arg3

但是使用您的REWRITE RULE,您将拥有与此模式匹配的Apache转向请求(所有绑定到/ Page的请求):

http://your.site.com/Page?a=arg1&b=arg2&c=arg3

然后你终于在PHP中将$ _GET ['a'],$ _GET ['b']和$ _GET ['c']都设置为值。

查看this book

答案 1 :(得分:1)

如果以这种方式传递参数,它们将不再是GET变量,因为它们不会使用传统的? GET语法传递。它们只是URL的一部分,将由您正在使用的“CMS”框架进行解析。

但是,如果您碰巧传递了“传统”GET变量并希望在服务器上读取它,则必须查阅CMS的文档。如果框架将使用漂亮的URL,它可能也会删除任何GET变量,因为它们不再是必需的。例如,CodeIgniter MVC框架(不是CMS本身,但可能用于构建它们)就是这样做的。

答案 2 :(得分:1)

您可以执行类似site.com/42的操作,并通过添加适当的重写规则来保留ID = 42的GET变量。例如,假设您正在运行Apache Web Server,则可以使用以下命令修改.htaccess文件(位于您的webroot目录中):

RewriteEngine On
RewriteRule ^(.*) /?id=$1 [L]

答案 3 :(得分:1)

问题是,它不再是GET变量,变量只是URL的一部分。然后,应用程序会自定义解析这些URL。大多数MVC框架遵循/controller/action/params规则,并根据部件的位置打破URL:

  • 第一个/controller部分决定使用哪个控制器
  • 第二个/action部分决定调用哪种方法
  • 以下任何参数仅作为参数传递给接收函数,其含义取决于函数和顺序
  • 有些人还使用/page:2这样的命名参数,因此他们不必依赖正确的顺序

这都可以定制。您还可以使用您的Web服务器(例如Apache)将这些类型的URL重写为旧的GET param URL,然后再访问您的应用程序。