【问题标题】:how to create query string for $_GET without HTML form and URL?如何在没有 HTML 表单和 URL 的情况下为 $_GET 创建查询字符串?
【发布时间】:2015-09-19 08:57:30
【问题描述】:

成像我们在主页:www.example.com

我们在此页面上有一个超链接。

<a href="category/Pizzas">Pizzas</a>

点击该超链接,地址栏的url为:

www.example.com/category/Pizzas

它会向我们展示不同种类的比萨饼。问题是我的服务器中没有像 category/Pizzas 这样的路径。它的工作方式是将 category 和 Pizzas 传递给两个查询字符串(page 和 cat),它们将存储在 $_GET 中。所以真正的网址是:

www.example.com/?page=category&cat=Pizzas

然后有一个函数可以渲染 Pizzas 页面。

您可以想象我们在主页上还有一些其他超链接,它们有不同的 url。例如:

<a href="category/Salads">Salads</a>
<a href="category/Wraps">Wraps</a>
<a href="category/Grinders">Grinders</a>

当您点击它时,查询字符串(页面和猫)将从 url 中捕获值并相应地呈现。

我不明白的部分是如何以及在何处定义查询字符串(在本例中为:page 和 cat)并从 URL 中捕获值,例如 category/Pizzas,因此我们可以拥有 page=category&cat=Pizzas。源代码中没有这两个查询字符串的 HTML 表单。它工作得很好。

ps。如果您有兴趣,这是我正在谈论的项目。这不是我的项目。 https://github.com/nelsonreitz/project0

【问题讨论】:

  • 对于 apache 服务器,这将通过 mod_rewrite 完成。

标签: php html


【解决方案1】:

在那个 repo 中,查看 public/.htaccess 这就是魔法发生的地方。它实际上是执行将 url 映射到参数的工作的 Web 服务器。代码如下所示:

RewriteEngine on
RewriteBase /
RewriteRule ^category/(.*)$ index.php?page=category&cat=$1 [L]

这样做是说任何看起来像 category/ 的 url 都将被重写为 index.php?page=category&cat=

所以 index.php 实际上处理了所有这些请求,并且具有正确的 GET 值 - 即使使用的 url 不同。

【讨论】:

    【解决方案2】:

    如果您使用的是 Apache,您可以使用 mod_rewrite 来执行此操作。您可以在这里了解更多信息:http://httpd.apache.org/docs/current/mod/mod_rewrite.html

    示例规则是:

    RewriteEngine On
    RewriteRule ^([^/]*)/([^/]*)$ /?page=$1&cat=$2 [L]
    

    【讨论】:

      【解决方案3】:

      他的意思是他不知道如何在 php 源代码中捕获 www.example.com/category/Pizzas 的 $_GET 值。

      这一切都是通过 apache mod rewrite 或 nginx 完成的:

      您可以在 index.php 页面上定义它:

      <?php
      if (isset($_GET['page']) && isset($_GET['cat'])) {
      $page = $_GET['page']; // category
      $cat = $_GET['cat']; // Pizzas
      // From here you can start using both strings
      }
      ?>
      

      php 会得到这个:

      www.example.com/index.php?page=category&cat=Pizzas
      

      用户将在 URL 上看到 www.example.com/category/Pizzas(感谢 mod rewrite):

      RewriteEngine on
      RewriteBase /
      RewriteRule ^category/(.*)$ index.php?page=category&cat=$1 [L]
      

      【讨论】:

        猜你喜欢
        • 2011-11-07
        • 1970-01-01
        • 1970-01-01
        • 2021-11-29
        • 1970-01-01
        • 2019-01-15
        • 1970-01-01
        • 1970-01-01
        • 2018-03-14
        相关资源
        最近更新 更多