2

每次用户在我的网站上注册时,我都希望他们拥有自己的子目录以及他们注册的“用户名”。每个用户子目录都会有相同的“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 作为我的工作环境。

谢谢

4

3 回答 3

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

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

index.php?url=/users/ivan

然后你 $_GET['url'] 在你的 index.php 并将它分成几块。

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

于 2009-08-16T00:54:55.897 回答
0

使其虚拟化。没有子目录,你可以使用mod_rewrite来模拟。

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

于 2009-08-16T00:51:51.920 回答
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']

于 2009-08-16T01:16:32.853 回答