0

如何在 PHP 中为每个用户实现一个虚 URL?我正在实施我的网络应用程序的登录系统作为 Drax LLP 登录系统的调整版本。

因此,每个用户都应该能够修改他的个人资料,该个人资料最终会出现在他的虚荣 URL 上……比如 xyz.com/user。

任何提示/想法?谢谢..

4

2 回答 2

0

这相对简单:您有一个mod_rewrite规则将请求映射www.domain.com/username到类似www.domain.com/users/username.

但是,您需要了解禁止成为用户名的内容,因为我认为您将拥有其他顶级页面,例如www.domain.com/aboutwww.domain.com/terms。因此,您不希望人们注册aboutterms作为用户名。

于 2010-09-23T07:57:30.330 回答
0

以下是所涉及文件的示例:

.ht 访问:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]
</IfModule>

索引.php

<?php
function getWebPath() {
    $location = "";

    // Read the relative URL into an array
    if(isset($_SERVER['HTTP_X_REWRITE_URL'])) { // IIS Rewrite
        $location = $_SERVER['HTTP_X_REWRITE_URL'];
    } elseif(isset($_SERVER['REQUEST_URI'])) { // Apache
        $location = $_SERVER['REQUEST_URI'];
    } elseif(isset($_SERVER['REDIRECT_URL'])) { // Apache mod_rewrite (breaks on CGI)
        $location = $_SERVER['REDIRECT_URL'];
    } elseif(isset($_SERVER['ORIG_PATH_INFO'])) { // IIS + CGI
        $location = $_SERVER['ORIG_PATH_INFO'];
    }

    return $location;
}

$location = getWebPath();

print_r($location);

上面的函数应该成为你前端控制器类中的一个方法。你只需要从 $location 中减去你的基本路径,这样你就剩下虚拟路径了。然后你可以做任何你想做的事情——例如,简单地分割'/',然后通过路径工作,根据 URI 将每个剩余部分传递给下一个控制器。您还可以使用正则表达式编写更复杂的路由规则(Django 和许多其他框架都这样做)。

例如:/profiles/hardik988

将被传递给负责“配置文件”的控制器,然后由控制器决定如何处理路径的其余部分。它可能会查找用户名并显示适当的模板。

于 2010-09-24T05:18:03.437 回答