如何以类似目录的方式存储用户?

时间:2017-05-08 22:27:15

标签: php

我对PHP缺乏经验,我一直致力于在我的工作进展网站上存储论坛帖子和用户档案。

我想知道的是:我怎样才能让人们以类似于我在许多其他人身上看到的方式访问我网站上的用户,而不是像https://example.org/user.php?id=521那样,他们可以访问类似的网页https://example.org/user/521

我正在使用PHP 7,只是你知道。

1 个答案:

答案 0 :(得分:0)

有很多不同的方法可以获得干净的URL。目前大多数框架,如Laravel,CraftCMS等,都将支持开箱即用,并提供文档,向您展示Web服务器配置的更新内容。

如果你想在没有库的情况下这样做,你需要做的就是让你的web服务器将任何url参数转发到一个slug中,这将被传递给你的PHP应用程序。

该重写块的示例看起来像NGINX:

location @app {
                rewrite ^/(.*)$ /?u=$1;
        }

这可以通过各种方式实现,具体取决于您的配置。

在您的PHP应用程序中,您基本上只需要捕获$_GET['u']并进行相应的解析。

例如,如果您执行$incoming_request = explode("/", $_GET['u'])并看到$incoming_request[0]包含“user”,则可以假设它正在尝试向您发送$incoming_request[1]中的用户ID,然后您可以运行你的支票。

这只是伪代码,但这个概念应该足以指出你正确的方向。

以下是在PHP中处理请求的示例:

// allowed page options via URL | no arguments defaults to landing
$url_access_pagelist = [
    "user",
];

//control all incoming url requests
if(!isset($_GET['u'])) {
    //URL has no path, set page landing
    $current_page = 'landing';
}
else {
    // give non empty GET data a variable
    $incoming_request = explode("/", strtolower($_GET['u']));
    // make sure incoming request is in the pagelist array) | switch() through page options as they exist
    if(in_array($incoming_request[0], $url_access_pagelist)){
        switch($incoming_request[0]) {
      case "user":
        $current_page = "user";
        if(isset($incoming_request[1])) {
          // this should be the user id
          echo $incoming_request[0] . $incoming_request[1];
        }
        break;
        }
    }
}