总是令我难以置信。当你在堆栈上询问一个问题时,url没有任何get语句。它也没有任何扩展名,如.cgi或.php。
然而,它不是一个静态的html页面,它是数据库驱动的,因为它会在你发布答案或问题时发生变化。
是否与他们的.htaccess配置有关。如何才能达到类似的效果。
使用php或其他语言,有人可以创建动态可编辑的php而无需手动执行,例如通过类似我提交此问题的方式的表单。
答案 0 :(得分:7)
基本上,Web服务器知道URL的各个部分实际上是GET参数,并且在将其交给PHP / Ruby / .NET /等之前“重写”URL。
例如,Apache使用mod_rewrite
模块来完成此行为。
答案 1 :(得分:3)
虽然我不能代表Stackoverflow,但我知道一种常见的方法是使用mod_rewrite将漂亮的网址转换为带有“GET”参数的网址。许多解决方案包装mod_rewrite,其他方式包括[非apache] Web服务器。
此cheetsheet也非常有用。
答案 2 :(得分:2)
这些名为Clean URLs,也称为漂亮或友好的网址:
清洁网址,RESTful网址或用户友好网址纯粹是结构性的 不包含查询字符串的URL,而只包含 资源的路径(在方案[例如http]和权限之后) [例如。 example.org])。这通常是为了审美,可用性或 搜索引擎优化(SEO)的目的。设计的其他原因 网站或Web服务的干净URL结构包括确保 个人资源多年来一直保持在同一个URL下 使万维网成为一个更加稳定和有用的系统 它们令人难忘,符合逻辑,易于打字,以人为本,而且寿命长。
每个Web服务器都有自己的方法来管理干净的URL。 Apache使用.htaccess
文件中的mod_rewrite读取规则。 Stack Overflow上有很多关于人们如何使用它的例子:
https://stackoverflow.com/search?q=htaccess+rewrite
对于大多数Web服务器,您可以管理一组有关如何重写URL以获取触发命名脚本的请求的规则。例如,您可以请求/questions/8811192/question-title
,但服务器会将其重写为/mywebsite.php?id=8811192&convention=questions
,然后您的脚本mywebsite.php将使用参数id和约定设置运行,以便您的脚本知道用户最初请求的内容。然后它会查询数据库并动态创建页面。
有关干净的URL的详细信息,请参阅您的Web服务器文档。
答案 3 :(得分:1)
Mod_rewrite就是一个例子。可以使用我隐藏应用程序中的.php扩展名。
或者,如果您正在使用任何Java东西或django或者烧瓶的应用程序平台,用于python或ruby on rails或rake for ruby等等等。
它是关于Web服务器如何处理对您用于处理交互性的应用程序层的请求的代理。从mod_php插件到fast_cgi到wsgi等等。
答案 4 :(得分:0)
默认情况下,某些框架就是这样做的。
以Yii或Zend Framework为例,他们会让你实现这种效果。
他们通常会邀请网络服务器帮助实现这一目标。
答案 5 :(得分:0)
Url路径不必限制在文件系统上的任何物理位置。
您可以解析Web应用程序中的url并执行映射到特定url模式的代码。将其视为内部应用程序mod_rewrite。大多数现代Web框架都有某种基于URL的调度程序。
但是,如果您正在使用cgi脚本或类似cgi的应用程序执行(例如,php-cgi,实际上它是一个fast-cgi协议服务器),您将不得不使用提到的mod_rewrite或一些类似的解决方案在您正在使用的Web服务器上。