【问题标题】:Webpages without a file extension没有文件扩展名的网页
【发布时间】:2014-12-14 00:36:54
【问题描述】:
我可以在那个网站上看到网址是http://stackoverflow.com/questions/ask。
之后没有文件扩展名,如果 ask 是一个文件夹,并且其中包含一个 index.aspx,例如,它会显示为 http://stackoverflow.com/questions/ask/。
他们是怎么做到的?他们如何使扩展消失?
谢谢,幻影
【问题讨论】:
标签:
url
web
file-extension
【解决方案1】:
他们正在使用一种称为重写规则的东西,可能在网站 Web 根目录的 .htaccess 文件中。他们在 .htaccess 文件中添加了类似的内容
RewriteEngine On # 开启重写引擎
RewriteRule ^ask/?$ questions.php?questionID={1} [NC,L]
【解决方案2】:
他们是怎么做到的?他们如何使扩展消失?
扩展并没有消失,只是没有扩展。在最近(比如 15 年)的 Web 编程世界中,Web 应用程序不再是一堆实际文件的实际目录。 Web 应用程序现在有许多不同的体系结构并应用了许多模式。 Web 服务器也可以通过 URL 重写扩展提供这样的功能。两者通常也结合使用。
实现这一点的最常见模式是Front Controller。这个想法是所有请求都进入一个单一的入口点。然后,此入口点可以决定执行哪些代码来生成输出。在大多数 MVC 框架中,前端控制器名称(通常是 index.php)之后的 URI 用于确定要调用哪个控制器类和控制器方法,尽管现在它们通常是可配置的。
在http://stackoverflow.com/questions/ask的例子中,一种可能的方案是:
- Web 服务器将 URL 重写为
http://stackoverflow.com/index.php/questions/ask
- index.php 作为前端控制器,然后分析其名称后的URI段,即
/questions/ask
- 然后它构造一个类
questions 的实例并调用它的ask 方法
- 该方法生成输出,然后作为请求的响应发回