2011-10-01 52 views
0

我已经开发了使用自定义MVC体系结构的项目。而且我对Apache世界很陌生,所以我很乐意帮助解决这个问题。在网上我找到了很多教程,但没有人喜欢我的兴趣。重写url以隐藏index.php并使查询更好

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

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

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

那么,你的控制器会收到一个请求,让它自己进入路由器,并且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”]分析请求。资产/文件夹中的所有内容都不会被触摸并正常工作。

注意,我建立了部分关我的帽子,它可能无法正常工作......

+0

良好的技术答案,但“悲哀而真实”位是不怎么样。将注意力吸引到人们不太了解的领域是不礼貌的。互联网讨论的第一条规则:很好! – halfer

+0

好的抱歉:)下次我会更加小心。 –

+0

我有我的项目的每个链接周围的功能'url()'。所以我一直在想,这可能是重要的一点,虽然这是我的第一MVC。 –