2014-10-18 283 views
3

我可以在那個網站上看到url是http://stackoverflow.com/questions/ask。 之後沒有文件擴展名,並且如果請求是一個文件夾,並且在該文件夾內,例如,它將顯示爲http://stackoverflow.com/questions/ask/
他們是怎麼做到的?他們如何使擴展消失? 謝謝,幻影沒有文件擴展名的網頁

+1

你問的是? – LeleDumbo 2014-10-18 16:07:39

+0

我問他們是怎麼做到的? – Phantom 2014-10-18 16:14:54

+0

[如何用Apache mod \ _rewrite隱藏.html擴展名](http://stackoverflow.com/questions/1992183/how-to-hide-the-html-extension-with-apache-mod-rewrite ) – easwee 2014-10-19 10:29:22

回答

6

他們是怎麼做到的?他們如何使擴展消失?

該擴展名不會消失,但根本沒有擴展名。在一個相當新的(比如說15年)的web編程世界裏,一個web應用程序不再是一堆實際文件的實際目錄。 Web應用程序現在有許多不同的體系結構並應用了許多模式。 Web服務器也可以通過URL重寫擴展提供這樣的功能。兩者通常也結合在一起。

執行此操作的最常見模式是Front Controller。這個想法是所有的請求都去了一個入口點。這個入口點可以決定執行哪個代碼來生成輸出。在大多數MVC框架中,前控制器名稱後面的URI(通常是index.php)用於確定要調用哪個控制器類和控制器方法,儘管現在它們通常是可配置的。

http://stackoverflow.com/questions/ask的例子中,一個可能的方案是:

  1. Web服務器重寫的URL http://stackoverflow.com/index.php/questions/ask
  2. 的index.php作爲前端控制器然後分析其名,它是​​
  3. 後的URI段
  4. 然後它構造一個類questions的實例並調用其ask方法
  5. 該方法生成輸出,然後將其作爲請求的響應發回st
+0

感謝您的回答。我現在明白這個話題了,謝謝! – Phantom 2014-10-18 18:34:38

3

他們正在使用一種稱爲重寫規則,可能在網站的Web根目錄中的.htaccess文件。他們加入這樣的事情他們.htaccess文件

RewriteEngine敘述在#打開重寫引擎

重寫規則^問/?$ questions.php?questionID = {1} [NC,L]

+0

謝謝你的回答。 – Phantom 2014-10-18 18:34:10

+0

你能解釋一下重寫規則在說什麼嗎? – DavidG 2018-02-16 12:43:30