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

时间:2011-10-01 11:26:54

标签: php apache .htaccess mod-rewrite

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

我有这样的网址: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

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

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

希望有人能提供帮助。感谢。

1 个答案:

答案 0 :(得分:1)

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

在MVC框架中,您使用ROUTER设置路由,并且路由器会分析您的网址,说明了HEY,我发现此网址符合您的请求,请继续使用它。

那么,你的控制器会收到一个路由到自己的请求,并在他认为合适的情况下对URL进行PARSES。比如使用explode('/',$ _SERVER ['REQUEST_URI'])然后读取url的不同部分以映射到预期的变量。

所有这些都是非常理论化的,因为有多种方式可以自定义方式实现它。你将不得不使用的唯一一个mod_rewrite魔法将所有请求传递给你的index.php,它将路由一切。看看下面的网址,了解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']来分析请求。资产/文件夹中的所有内容都不会被触及并正常工作。

请注意,我将这部分从我的帽子中删除,它可能无效......