我正在使用mod_rewrite重写用户个人资料的网址,如下所示:domain.com/users/JohnSmith。
我当时想跳过用户文件夹可能更简洁,只需将其命名为:domain.com/JohnSmith。
我的问题:我该怎么做并保留我的系统和站点文件夹?如果我查找domain.com/browsersupport,profile.php页面将检查名称并在数据库中查找,并且由于没有用户具有该名称,因此不会显示任何页面。
我知道可以使用PHP代码中的一些if语句修复它。此外,需要保留文件夹名称,以便用户无法注册这些名称。但是对于个人资料的查询 - 是否有更简洁的方式?也许要排除.htaccess文件中的系统文件夹,以便profile.php不会去寻找那个用户?
答案 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个或更少。