【问题标题】:GET variables and pretty urls获取变量和漂亮的网址
【发布时间】:2010-03-11 03:29:53
【问题描述】:

我认为这是一个菜鸟问题,但这里是。

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

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

【问题讨论】:

    标签: php url get


    【解决方案1】:

    他们这样做的方式是使用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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

        • 第一个/controller 部分决定使用哪个控制器
        • 第二个/action部分决定调用哪个方法
        • 后面的任何参数都只是作为参数传递给接收函数,含义取决于函数和顺序
        • 有些还使用命名参数,如/page:2,因此它们不必依赖正确的顺序

        这都可以自定义。您还可以使用您的 Web 服务器(例如 Apache)将这些类型的 URL 重写为旧的 GET 参数 URL,甚至在它们到达您的应用程序之前。

        【讨论】:

          【解决方案4】:

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-02-04
            • 1970-01-01
            • 1970-01-01
            • 2011-09-19
            • 2014-04-22
            • 2012-03-07
            • 1970-01-01
            • 2017-07-27
            相关资源
            最近更新 更多