0

如果 URL 如下所示,我如何从 PHP 访问变量 GET 变量: http ://example.com/somehash

当有这样的事情时,我显然知道该怎么做: http ://example.com/f.php?h=somehash

在这里,我只需要 $_GET["h"],但我不知道如何处理第一种情况...

4

5 回答 5

3

答案是你不能。至少在没有一些额外的 Web 服务器配置的情况下并非如此。通常,为了在 PHP 中实现这样的“干净 URL”,在 Web 服务器中执行 URL 重写(mod_rewrite例如在 Apache 上)。这样做是静默重定向请求

http://example.com/somehash

由脚本处理

http://example.com/f.php?h=somehash

这允许 PHP$_GET像往常一样填充,同时仍然在浏览器中显示一个干净的 URL。

您可以在 StackOverflow 或 Google 中搜索任意数量的关于如何为干净的 URL 进行 URL 重写的示例。

于 2012-12-05T19:16:39.760 回答
0

如果服务器有重写规则将 URL 更改为漂亮的,它仍然可以正常访问。($_GET) 这是因为脚本以相同的方式解释 URL,但是 mod-rewrite 规则会更改显示的 URL 以使其更漂亮/更容易链接回来。

查看我的答案:需要一些关于 example.php/example的答案以获取更多信息。

于 2012-12-05T19:18:21.547 回答
0

这里有多个部分在起作用:当用户请求http://example.com/some-pageexample.com时,他们连接的 Web 服务器会接收到请求域和路径的 HTTP 请求some-page

您的 Web 服务器会选择该域,将域与正确的虚拟主机匹配,然后将请求传递给该域。因为some-page域的文档根目录中可能没有指定文件,所以 Web 服务器将发回一条404 Not Found错误消息。

您想告诉您的 Web 服务器将所有与已知文件或目录不匹配的请求重定向到默认脚本,例如index.php. 如果您使用的是 Apache,则可以使用 HTTP 重写规则来完成此操作。当 Apache 发送请求时,它通常不会被修改。您将能够使用$_SERER['REQUEST_URI']拾取您想要的路径。

于 2012-12-05T19:18:53.247 回答
0

尽管您可能希望使用重写规则来正确执行所有操作,但您仍然可以使用基本的 PHP 来查找 URI 段,假设您已经有了重写规则以允许首先解析指定的 URL...

function uriSegments()
{
    return explode("/", $_SERVER['REQUEST_URI']);
}

$segments = uriSegments();

echo $segments[1];

那应该让你“somehash”

于 2012-12-05T19:20:53.277 回答
0

在 PHP 中,您可以查阅该$_SERVER['REQUEST_URI"]值,并在需要时应用一些文本转换(子字符串、正则表达式),但在您的情况下,直接使用该值应该可以工作。

于 2012-12-05T19:21:08.987 回答