如果 URL 如下所示,我如何从 PHP 访问变量 GET 变量: http ://example.com/somehash
当有这样的事情时,我显然知道该怎么做: http ://example.com/f.php?h=somehash
在这里,我只需要 $_GET["h"],但我不知道如何处理第一种情况...
如果 URL 如下所示,我如何从 PHP 访问变量 GET 变量: http ://example.com/somehash
当有这样的事情时,我显然知道该怎么做: http ://example.com/f.php?h=somehash
在这里,我只需要 $_GET["h"],但我不知道如何处理第一种情况...
答案是你不能。至少在没有一些额外的 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 重写的示例。
如果服务器有重写规则将 URL 更改为漂亮的,它仍然可以正常访问。($_GET) 这是因为脚本以相同的方式解释 URL,但是 mod-rewrite 规则会更改显示的 URL 以使其更漂亮/更容易链接回来。
查看我的答案:需要一些关于 example.php/example的答案以获取更多信息。
这里有多个部分在起作用:当用户请求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']
拾取您想要的路径。
尽管您可能希望使用重写规则来正确执行所有操作,但您仍然可以使用基本的 PHP 来查找 URI 段,假设您已经有了重写规则以允许首先解析指定的 URL...
function uriSegments()
{
return explode("/", $_SERVER['REQUEST_URI']);
}
$segments = uriSegments();
echo $segments[1];
那应该让你“somehash”
在 PHP 中,您可以查阅该$_SERVER['REQUEST_URI"]
值,并在需要时应用一些文本转换(子字符串、正则表达式),但在您的情况下,直接使用该值应该可以工作。