使用htaccess和php创建动态子目录

时间:2009-08-16 00:44:20

标签: php apache .htaccess subdirectory

用户每次在我的网站上注册时,我希望他们拥有自己的子目录及其注册的“用户名”。每个用户子目录都将具有相同的“index.php”文件,该文件将执行某些操作。

例如:“/ users / username1 /”和“/ users / username2 /”

如果有人想要访问子目录,他们可以简单地去: “www.example.com/users/username1/”或“www.example.com/users/username2 /”

简单易乱的解决方案是为每个用户创建一个子目录,并在每个目录中放置相同的“index.php”文件。但对我来说,这只会占用我的服务器空间并使我的目录变大。

我想知道是否可以使用.htaccess完成所有这些操作?我可以创建一个“index.php”和一个“.htaccess”文件并将它们放在我的“/ users /”目录中吗?我必须将哪些实际代码放在我的.htaccess文件中?

如果您有更好的方法,请告诉我。我使用Apache和PHP作为我的工作环境。

谢谢

3 个答案:

答案 0 :(得分:6)

嗯,例如,您可以使用这样的一个htaccess来完成所有操作:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
</IfModule>

它的作用:

  • 启用重写引擎
  • 检查所请求的文件是否存在
  • 检查所请求的目录是否存在
  • 如果不是,它会将请求重定向到您的主index.php

基本上这意味着如果您输入urdo,例如yourdomain.com/users/ivan/,您的请求将被重定向到:

index.php?url=/users/ivan

然后你在index.php中使用$ _GET ['url']并将其拆分成碎片。

这只是一个示例,还有其他mod_rewrite方法可以做到这一点。

答案 1 :(得分:0)

让它成为虚拟的。没有子目录,您可以使用mod_rewrite来模拟它。

使用mod_rewrite,您可以将/ users / username1引向/users.php?user=username1。对于客户来说,一切都是透明的,他不会注意到真正发生的事情。

答案 2 :(得分:0)

通过使用这样的东西:

RewriteEngine On
RewriteRule ^([\-_0-9A-Za-z]+)$  index.php?a=$1 [L]
You can customize RewriteRule as much as you want.

您基本上可以键入所需的任何目录,并将其重定向到index.php页面。

如果要确保不重定向现有目录,请执行以下操作:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([\-_0-9A-Za-z]+)$  index.php?a=$1 [L]

如果要限制范围,那么只重定向user/的子目录(类似于Stack Overflow),只需将'user'添加到规则的开头:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^user/([\-_0-9A-Za-z]+)$  index.php?a=$1 [L]

最后,如果你想让一个单独的文件处理所有与你的实际index.php页面分开的用户请求:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^user/([\-_0-9A-Za-z]+)$  users.php?a=$1 [L]

这是我用来分发CSS文件的非常类似的设置。

注意:目录将包含$_GET['a']