1

我正在做一个项目,我在浏览一些代码时偶然发现了这个。我曾尝试用谷歌搜索,但找不到正确的关键字来搜索这个问题。

http://www.fruit.com/example.php/red

我对此感到困惑,例如,.php它的结尾仍然有一个字符/red。这样做的目的是什么?跟POST方法有关系吗?

4

2 回答 2

3

一种可能的解释是开发人员正在使用.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

这不是那么漂亮,也不那么容易链接回这个特定页面。

于 2012-12-05T02:10:30.840 回答
1

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

行动:RewriteRule,本质上只是让服务器知道我们将要执行重写

Pattern: .* 是我们在这个例子中的模式。这 ”。” 代表任何字符,意思是匹配任何字符,“*”告诉它重复这个。因此,匹配重写后的任何字符。

rewrite 是执行此操作的页面,因此 example.php 是 rewrite。这个“$”告诉它从哪里开始重写。因此,我们将从“$”符号开始重写,并使用我们的模式。我们的模式“.*”告诉我们匹配任何字符,在本例中为红色。

[L] 表示最后一条规则。就是这样,没有更多的规则可循。您可以对多个页面使用多个重写规则。

所以现在,服务器不再使用 example.php?id=red,而是知道在“example.php/”之后开始匹配我们提供的任何字符。

于 2012-12-05T02:26:26.883 回答