【发布时间】:2012-12-05 02:08:06
【问题描述】:
我正在做一个项目,我在浏览一些代码时偶然发现了这个。我曾尝试 google,但找不到正确的关键字来搜索这个问题。
http://www.fruit.com/example.php/red
我对此感到困惑,.php 的结尾仍然有一个字符 /red 例如。
这样做的目的是什么?和POST方法有关系吗?
【问题讨论】:
我正在做一个项目,我在浏览一些代码时偶然发现了这个。我曾尝试 google,但找不到正确的关键字来搜索这个问题。
http://www.fruit.com/example.php/red
我对此感到困惑,.php 的结尾仍然有一个字符 /red 例如。
这样做的目的是什么?和POST方法有关系吗?
【问题讨论】:
一个可能的解释是开发者使用.htaccess重写规则。很可能是与页面有关的额外数据(例如您提到的 POST 和 GET),这样做只是为了使 URL 看起来更漂亮或简化 URL。
有时也这样做是为了更容易链接回该页面,特别是如果该页面是基于数据生成的。
一个受欢迎的地方是博客。您经常看到博客显示链接为:
http://blog.com/blog/2001/02/23/how-pretty-is-this
实际上,对服务器的请求类似于:
/blog.php?year=2001&month=02&day=23&title=how-pretty-is-this
这不是那么漂亮,也不那么容易链接回这个特定页面。
【讨论】:
$_GET['year'],或者在我们使用$_GET['year']之前需要声明其他内容。
Mr.Xenotype 很好地回答了您的问题,但遗漏了一小部分。
Does it have something to do with POST method?
不,它处理 GET 方法。正如他所说,让 URL 看起来“漂亮”非常重要,如果网站是这样设计的,它实际上可能是 RESTful API(对初学者来说有点高级)的关键部分。
http://www.fruit.com/example.php/red
是一样的
http://www.fruit.com/example.php?id=red
需要对 .htaccess 文件进行一些修改才能使用所谓的正则表达式或 REGEX 来完成此操作。如果您想了解更多信息,我很乐意提供一些示例。
在 .htaccess 文件(服务器配置文件)中添加“RewriteRule”可以让服务器改变服务器文件/文件夹的访问方式
//probably what the rewrite looks like of the example you provided
RewriteRule .* example.php/$0 [L]
RewriteRules 分为 4 个块:action、pattern、rewrite 和 flag
Action:RewriteRule,本质上只是让服务器知道我们将要执行重写
模式:.* 是本例中的模式。这 ”。”代表任何字符,意思是匹配任何字符,“*”告诉它重复这个。因此,匹配重写后的任何字符。
重写是执行此操作的页面,因此 example.php 是重写。这个“$”告诉它从哪里开始重写。因此,我们将从“$”符号开始重写,并使用我们的模式。我们的模式“.*”告诉我们匹配任何字符,在本例中为红色。
[L] 表示最后一条规则。就是这样,没有更多的规则可循。您可以对多个页面使用多个重写规则。
所以现在,服务器不再使用 example.php?id=red,而是知道在“example.php/”之后开始匹配我们提供的任何字符。
【讨论】: