Answers:
从网址中删除扩展名有多种原因:
请记住,许多网站都是由内容管理系统(CMS)生成的,它会使URL看起来像这样:/index.php?page=this-is-the-widget-page
。这特别丑陋,并且不仅扩展而已。重写以删除index.php?page=
它会更好。
Web上不需要扩展,因为服务器将文档类型作为标题发送。网页以text/html
,image/png
或作为图像提供image/jpeg
。这使浏览器知道如何呈现内容,而无需使用扩展名来确定URL包含文本,HTML,PDF或图像(有关更多信息,请参阅Wikipedia文章Internet媒体类型)。
一些网站管理员选择在其URL上使用与该内容类型匹配的扩展名。因此,任何text/html
文档都将具有.html
扩展名,并且任何image/png
文档都将具有.png
扩展名。当将URL保存到文件系统中时,这会有所帮助,其中有关其内容类型的元数据会丢失。在大多数文件系统中,扩展名选择打开文件的程序。因此,即使某个网页由PHP提供服务,某些网站站长也会删除该.php
扩展名,而另一些则由替换.html
。
还有一个问题是,如果URL /
没有扩展名,URL是否最好以结尾斜杠()结尾,这在Stack Overflow上有很多讨论。
这是我针对自己的个人网站的“酷” URI方案的类型。
就我个人而言,我开始这样做的原因(也许还有更多的Web设计师/开发人员!)是在阅读了“ Cool URIs not change”一文之后 –该文档由万维网的创始者Tim Berners撰写。 -李
在蒂姆·伯纳斯·李(Tim Berners-Lee)的著名文章中,他基本上说出了斯蒂芬·奥斯特米勒(Stephen Ostermiller)对这个问题的出色回答所具有的相同原因 。
为了对您的主要问题“为什么扩展名隐藏在URL中?”给出更具体的答案,那么,我想说我的主要原因是:
1.为了将来验证URI:
例如,在当时使用URI之类的网址听起来像是个好主意:
http://www.example.com/page.pl
其中.pl
是Perl脚本的文件扩展名。但是,如今,大多数Web开发人员都使用ASP.NET或PHP进行后端脚本编写,因此,从今天开始,
http://www.example.com/page.php
听起来似乎是一个更好的主意,最终PHP和ASP / ASP.net将变得过时。因此,一个更好的主意是完全删除扩展名。
2.可读性和易记性:
将“很酷”的URI以口头形式在纸上(例如广告,名片等)传递给人们更容易,更不用说容易记住了。
3.“可破解性” *
尽管我会说这些天的绝大多数用户可能都通过搜索引擎搜索了所有内容–我什至看到有人会去地址栏并键入www.google.com
,然后使用Google键入www.ebay.com
!但是,我认为如果我有一个基于多媒体的网站,则URI http://www.example.com/video
暗示可以在URI下找到音乐部分http://www.example.com/audio
,依此类推。(我仍然使用地址栏访问网站–关于这种事情我相当老套!)
*(噢!“良好的维护能力” -那个词甚至还存在?嗯,确实现在!):-)
4. **美学: 使它们看起来更漂亮!(怪我的强迫症!)
但是,通过阅读各种与SEO相关的网站,我注意到许多网络管理员实际上在动态URI上附加了文件扩展名,例如:
实际的URI可能是:
http://www.example.com/article
但是,网站站长将执行重写以使URI“看起来”为静态,例如:
http://www.example.com/article.html
其背后的逻辑是,基本上,搜索引擎将为静态页面(显然,其更改可能性较小)分配更高的排名。(尽管我不是SEO方面的专家,但我个人并不认同这个想法–我猜测,由于Google和Bing算法背后的想法,它所需要的不仅仅是假冒的文件扩展名,让您进入SERP杆位!)
有关命名URI的更多信息,建议阅读以下文章:
蒂姆·伯纳斯·李:
W3C质量检查技巧:
Brian Kelly(英国网络焦点/ UKOLN-巴斯大学):
希望这可以帮助!
我完全同意以上所有答案。只是补充说,在URL中隐藏扩展的原因之一就是安全性。简而言之,如果您不在URL中公开扩展名,那么很难弄清构建应用程序所基于的技术。因此,假设用PHP制作的页面没有隐藏,并且扩展名没有被隐藏,那么黑客可能会发现PHP的漏洞并使用它执行某些恶意活动。
完全同意“ Stephen Ostermiller”的解释,但是我想提到隐藏URL扩展的技巧。为此,您必须使用.htaccess重写规则,这是可以帮助您的脚本:
将外部.php
请求重定向到无扩展名的URL
RewriteCond %{THE_REQUEST} ^(.+)\.php([#?][^\ ]*)?\ HTTP/
RewriteRule ^(.+)\.php$ http://example.com/folder/$1 [R=301,L]