php虚拟目录基于会话变量和数据库查询

时间:2013-09-05 19:13:07

标签: php .htaccess mod-rewrite

在我的网站上,我有三种类型的用户,比方说A,B和C.他们可以访问的网页大多不同,但仍然很少重叠。我已经制作了如下目录。等。

Root
    A
        A1
        A2
        A3
        K1
        K2
    B
        B1
        B2
        K1
    C
        C1
        C2
        C3
        K1
        K2

所以这里的文件K1和K2有共同的名称,但不是类似的内容。当A类型的用户登录时,他可以浏览domain.com/A/A1/ domain.com/A/K2/等.B类型的用户可以浏览domain.com/B/B1,依此类推。

我想要的是,当A类用户登录时,他浏览domain.com/A1/ domain.com/K1等等,而不使用A B等之间。现在为了防止文件的清晰,我无法将所有文件混合在一起,因此需要将它们保持在与上述相同的目录配置中。那该怎么办?怎么办?

mod_rewrite有助于创建虚拟目录,但在这种情况下它无济于事,因为我们需要PHP会话变量n数据库查询来选择如何显示,以及用户可以访问的内容。

我可能不太清楚,所以请在理解问题时询问您遇到的任何问题。 感谢。

1 个答案:

答案 0 :(得分:1)

您必须做两件事:获取请求的URI,获取用户类型。然后你就会知道要服务的目录。 htaccess和mod_rewrite在做第二件事时是不够的,因为它无法访问数据库。

你可以做的是使用以下方法将所有内容路由到某种php控制器:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /user_type.php?request=$1 [L]

然后user_type.php将知道request $_GET变量中的第一个内容,然后它可以通过获取用户类型来执行第二件事,然后根据用户类型。类似的东西:

$file_to_serve = $_GET['request'];

if($user_type == 'A')
    $file_to_serve = 'A/' . $file_to_serve;