如何使用PHP将查询sting更改为另一个字符串?

时间:2018-01-10 08:17:50

标签: php

成功完成注册表后,我将用户重定向到 ccroipr-id.php?id = 63 页面。这里新值保存到数据库

ccroipr-201801101515569979

每次新注册都会更改此值。

现在,对于每个个人资料页面,我都会使用 ccroipr-id.php?id = 63 页面显示数据。

但现在我想要的网址是

ccroipr-201801101515569979.php

因此,希望可能的结果是:domain.com/ccroipr/201801101515569979

你能告诉我怎样才能实现这个目标?

注意:我正在学习PHP。

1 个答案:

答案 0 :(得分:0)

要将URL domain.com/ccroipr/201801101515569979用于用户个人资料,您需要执行以下两个步骤:

在您的网站上创建一个名为ccroipr.php的php文件,其中包含分析请求网址的代码。

这可以通过在PHP中使用PHP全局$_SERVER变量来实现。它包含一个名为'REQUEST_URI'的字段,用于存储用于访问给定文件的路径。因此,对于网址domain.com/ccroipr/201801101515569979,变量$_SERVER['REQUEST_URI']包含值ccroipr/201801101515569979。这可以用来提取suer id:

$requestParts = explode('/', strstr($_SERVER['REQUEST_URI'] . '?', '?', TRUE));
$userId = '';
if (count($requestParts) > 1) {
    $userId = $requestParts[1];
}

if ($userId === '') {
    // Redirect to login page, generate a new ID or show an error.
    die();
}
// Call database and filter for the $userId value to retrieve all userspecific data
// Generate the specific HTML

函数strstr($path, '?', TRUE)切断了所请求路径中的所有GET参数。您仍然可以通过$_GET变量访问它们。在原始路径中添加了一个问号,以确保在没有提交此类参数的情况下,该功能仍然可以像预期的那样运行。

函数explode('/', $url)然后分隔由斜杠分隔的路径的所有部分,因此可以自己分析每个部分。

如果在给定的网址中提交了用户ID的路径部分,则条件if (count($requestParts) > 1)会检查。如果是,则将其保存在$userId变量中。但请记住,仍然可能已经为它提交了一个空字符串。如果有人打电话给domain.com/ccroipr/,就会发生这种情况。

条件if ($userId === '')然后验证是否真的提交了用户ID。

修改.htaccess文件以允许省略.php结尾的请求。

在这个问题中最好地描述了实现这一目标的方法:How to execute a PHP web page without the .php extension in the URL?