2011-10-01 50 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。 –