2014-10-18 222 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