大家好我想知道为什么一些使用php(或任何其他服务器端脚本语言)的网站不显示扩展甚至文件。 喜欢这个url stackoverflow.com/questions/ask 还有一些网站从用户那里获取数据,假设一个网站允许用户发布一些随机帖子,好吧所以当我们点击它发送给我们的帖子时: domain.com/post/what-user-posted-goes-here 如果我们尝试访问domain.com/post/,我们会收到找不到页面的错误。
我问这个问题是因为我想知道使用的方法是什么,它与php有关吗?因为我想用它。
答案 0 :(得分:2)
这是因为他们使用Apache的mod_rewrite
:
http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html
您可以轻松地使用它重新路由网址,因此如果您愿意,可以将/test
指向/pages/test.html
。
RewriteEngine on
RewriteRule test /pages/test.html
通常,人们使用regex
进行动态重新路由,例如:
RewriteEngine on
RewriteRule ^page/([^/\.]+)/?$ index.php?page=$1 [L]
因此/page/test-page
会显示index.php?page=test-page
答案 1 :(得分:0)
如果您放置domain.com/post/,它会查找index.php或index.html。如果它找不到其中之一,它就会出错。它根本与PHP无关:)
答案 2 :(得分:0)
以防万一,Stack Overflow是基于ASP.NET构建的。
您正在寻找的关键词是“无扩展名网址”。实施取决于您正在使用的服务器。
对于Apache和PHP,请参阅以下答案:.htaccess: non-www to www + extensionless urls + no index
答案 3 :(得分:0)
许多网站使用一种路由所有请求的网关脚本。通常在这些情况下,mod_rewrite
之类的内容用于将请求定向到该脚本。
例如:http://example.com/blog/my-first-post
和http://example.com/blog/my-second-post
都可以重写为/index.php
。然后,该索引脚本可以解析请求以确定正在请求博客帖子以及哪个特定帖子。
答案 4 :(得分:0)
Web服务器控制将哪些请求发送到哪些程序。当domain.com/folder/file.ext被发送到文件的处理程序时,最简单的方法就是您所描述的。对于.php文件,这可能是PHP,或者对于HTML文件,文件可能只是按原样显示。
另一种可能性是benhowdle89所描述的,这也是大多数Web服务器的默认行为 - 如果你要求domain.com/folder/,它会检查index.html,或index.php,或类似的东西。 / p>
对于像SO这样的网站,映射是不同的。 Web服务器配置为接收/questions/4339829/why-some-urls-of-websites-doesnt-show-the-php-extention-just-shows-words-like
之类的请求,并将该请求发送给知道如何处理它的程序。例如,它可能类似于/scripts/displayquestion.php?question_id=4339828
,也可能是为处理请求而编写的任何其他程序。这可以是PHP脚本,也可以是应用程序服务器,也可以是用其他语言编写的脚本。
答案 5 :(得分:0)
您所谈论的是网址的search engine optimization(SEO)。
有关详细信息,请参阅How to Make your URLs SEO Friendly和SEO friendly URL in PHP,因为此主题已经在SO和网络上得到了很好的记录。
答案 6 :(得分:0)
实现这一目标的方法很简单。当用户指向目录时,服务器会查找该目录的根目录(index.php)。
因此,在您的示例中,domain.com/post /您将拥有一个名为post的目录(文件夹)。在该文件夹中,您将拥有index.php。服务器将返回该文件夹中的index.php文件,URL不会显示php文件,只显示URL domain.com/post/。
如果服务器要显示php文件,它看起来像:domain.com/post/index.php,但index.php不会显示。
与其他评论过的人一样,目的是为了搜索引擎优化(搜索引擎优化)以及如果你改变你正在开发你网站的内容的保障,你不会丢失你的SEO链接或创建人们为您的网站添加书签时的死链接。