我认为这是一个noob问题,但是这里有。
我试图在PHP中更好地理解$ _GET变量。许多CMS等将诸如site.com/?ID=42之类的内容转换为类似site.com/42
的内容我的问题是,当发生这种情况时,$ _GET变量会发生什么?我尝试在页面加载时打印GET数组,它是空的。
答案 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']都设置为值。
答案 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,然后再访问您的应用程序。