您定义规则的方式增加了复杂性。
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule .* - [L]
以上规则表示文件名是否是文件进程的目录。之后不要再处理了。
RewriteRule ^(.*)$ http://www.website.com/profile.php?u=$1 [NC]
此规则意味着将任何请求 uri 映射到profile.php?u=
现在,当您请求/它时,www.website.com它会检查第一条规则并且它无法匹配。然后它检查第二条规则并将其映射到profile.php?u=.
- 解决它的一种方法是检查 *if 是否
$_GET['u']为空或/in profile.php。如果是则加载index.php.
另一种方法是为您的用户名找到适当的正则表达式,一旦找到,请在此处使用它。
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(USERNAME_REGEX)$ http://www.website.com/profile.php?u=$1 [NC,L]
处理这个问题的最好方法是使用 PHP,
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?uri=$1 [L]
现在index.php会得到你通过的每一个uri。现在您可以处理index.php.