影像我们在主页: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
答案 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]