.htaccess mod_rewrite - 保留文件夹名称

时间:2012-06-19 19:44:35

标签: php .htaccess mod-rewrite

我正在使用mod_rewrite重写用户个人资料的网址,如下所示:domain.com/users/JohnSmith。

我当时想跳过用户文件夹可能更简洁,只需将其命名为:domain.com/JohnSmith。

我的问题:我该怎么做并保留我的系统和站点文件夹?如果我查找domain.com/browsersupport,profile.php页面将检查名称并在数据库中查找,并且由于没有用户具有该名称,因此不会显示任何页面。

我知道可以使用PHP代码中的一些if语句修复它。此外,需要保留文件夹名称,以便用户无法注册这些名称。但是对于个人资料的查询 - 是否有更简洁的方式?也许要排除.htaccess文件中的系统文件夹,以便profile.php不会去寻找那个用户?

2 个答案:

答案 0 :(得分:1)

这就是这两个条件发挥作用的地方:

  # if the request does NOT map to a file
  RewriteCOnd %{REQUEST_FILENAME} !-f
  # and the request does NOT map to a directory
  RewriteCOnd %{REQUEST_FILENAME} !-d
  # only THEN use this rewriterule
  RewriteRulle ....etc...

如果你有两个'动态'页面和动态用户,RewriteRule应该在一个进程中结束,该进程检查是否存在该名称的页面,并且只有在不存在的情况下,才会提供用户页面。

答案 1 :(得分:0)

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule #insert user rewrite rule here

如果不存在该给定名称的文件夹或文件,那么这将仅应用重写规则(您的问题似乎暗示文档根目录中存在browsersupport等)。

是的,你必须勤勉地让用户知道他们不能注册这样的某些名字。如果他们这样做,他们将无法通过该路线访问他们的用户名。

我已经做到了这一点,但是我有一个自我强加的规则,可能不适合所有人但对我有效:用户名至少必须是5个字符,控制器必须是4个或更少。

相关问题