您定义规则的方式增加了复杂性。
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
.