重写url以隐藏index.php并使查询更好


Rewriting url to hide index.php and to make query nice

我开发了一个使用自定义MVC架构的项目。我是Apache世界的新手,所以我希望在这个问题上得到帮助。我在网上找到了很多教程,但是没有人喜欢我的兴趣。

我有这样的URL: http://knjiskicrv.comoj.com/index.php?page=book&id=1

我希望像这样显示:http://knjiskicrv.comoj.com/book/id/1

或者这个:http://knjiskicrv.comoj.com/index.php?page=faq进入:http://knjiskicrv.comoj.com/faq

如果查询(http://knjiskicrv.comoj.com/index.php)中没有page,我想显示:http://knjiskicrv.comoj.com/

同样在查询(http://knjiskicrv.comoj.com/index.php?category=2)中没有page,它应该像这样http://knjiskicrv.comoj.com/category/2

希望有人能帮忙。谢谢。

实际上,你的问题是一个两步问题。你首先需要理解什么是MVC中的"路由"。如果你有自己的MVC框架实现,而你不支持路由,那么这可能意味着你之前甚至不知道它是如何工作的。(悲伤但真实)

在MVC框架中,你使用路由器设置路由,路由器为你分析url,说嘿,我发现这个url匹配你的请求,继续和它一起工作。

那么,您的控制器接收到路由到自身的请求,并按照他认为合适的方式解析url。例如使用explosion ('/', $_SERVER['REQUEST_URI']),然后读取url的不同部分以映射到期望的变量。

所有这些都是非常理论上的,因为有无数的方法来实现它的自定义方式。您唯一需要使用的是mod_rewrite魔法,将所有请求传递给index.php,它将路由所有内容。查看下面的url来了解mod_rewrite,这是一个非常复杂的主题:

http://www.addedbytes.com/for-beginners/url-rewriting-for-beginners/

我通常会这样做,但我在家无法访问它:

RewriteEngine On
RewriteCond %{REQUEST_URI} !^assets/
RewriteRule .* index.php

这会将所有流量重定向到index.php,然后你可以使用$_SERVER['REQUEST_URI']来分析请求。