有些网站,无论您访问哪个页面,总是只在地址栏中显示其域名而不显示其他任何内容。
许多都显示文件夹,例如https://superuser.com/questions/ask,但不显示实际的文件,就像http://domain.tld/folder/file.extension
。
两者是如何实现的?
答案1
这是因为对 URL 的真正含义存在一些误解,可能静态 .HTML 文件和 PHP 脚本的出现导致了这种情况。
传统上,TLD 后面的所有内容都是指向特定文件的指针。假设一篇博客文章位于example.com/blog/2009/oct/18/what-have-we-come-to
。如果不使用花哨的技术,这意味着有一个名为 blog 的文件夹,里面有一个2009
文件夹,里面有一个用于每个月的文件夹,而这些文件夹中还有另一个用于每个月的文件夹。显然,这很快就会变得非常复杂。
这就是 Web 服务器(例如 Apache)和编程语言(例如 PHP)发明的原因URL 重写。该脚本的作用是将所述 URL 转换为更易于管理的内容,例如example.com/blog/articles.php?id=423
。在这里,脚本articles.php
将使用提供的帖子 ID 来查找适用的帖子,然后它将显示该帖子,但用户仍会看到 URL 为example.com/blog/2009/oct/18/what-have-we-come-to
。
另一种方法是完全废弃所有这些。TLD(在本例中为/questions/56772/website-url-hiding-hiding-file
)之后的所有内容都只是指向内容,不一定是文件。一些网站,例如 Super User,是使用 MVC(模型-视图-控制器)方法构建的。通常,这涉及网站的 URL 列表,并将它们映射到适用的功能和代码以显示该页面。例如,Super User 可能看起来像这样1:
'superuser.com/' > displayFrontPage()
'superuser.com/questions/' > displayQuestionsList(sorted=default)
'superuser.com/questions/<QuestionID>/<QuestionID>' > displayQuestion(question= QuestionID)
这通常会被单独放在一个文件中。常见的布局可能是:
superuser/
controller.aspx (which contains the list of URLs and points to a view in views.aspx)
views.aspx (which contains all the code for the superuser, such as displayFrontPage() and displayQuestion(question= QuestionID))
models.aspx (which contains information about the table in the database.)
1请记住,我不知道 ASP MVC 的控制器是如何工作的(我更喜欢 Django),所以这可能不太准确。这只是一个例子
答案2
该文件是 Web 服务器配置中定义的默认文件,或者它正在使用 URL 重写(文件夹路径甚至可能不存在)。
答案3
我真正想要的是:只需创建一个目录,在文件夹中包含 index.php/html,并且指向该目录的链接不会显示该文件。也感谢其他内容。