如何在没有HTML表单和URL的情况下为$ _GET创建查询字符串?

时间:2015-09-19 08:57:30

标签: php html

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

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

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

单击此超链接时,地址栏中的网址将为:

www.example.com/category/Pizzas

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

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

然后有一个渲染Pizzas页面的功能。

你可以想象我们在主页面上有一些其他的超链接,它们有不同的网址。例如:

<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&amp; cat = Pizzas 。源代码中的这两个查询字符串没有HTML表单。它完美无缺。

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

3 个答案:

答案 0 :(得分:2)

在该回购中,请查看public / .htaccess 这就是魔术发生的地方。它是实际完成将url映射到参数的Web服务器。代码如下所示:

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

这样做是说任何看起来像类别的网址都会被重写为index.php?page = category&amp; cat =

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

答案 1 :(得分:1)

如果您正在使用Apache,则可以使用mod_rewrite执行此操作。您可以在此处了解详情:http://httpd.apache.org/docs/current/mod/mod_rewrite.html

示例规则是:

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

答案 2 :(得分:0)

他意味着他不知道在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重写):

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