如何将 URL 规则重写到根文件夹而不是其子目录?

How to rewrite URL rules to the root folder but not its subdirectories?

我正在为我的用户创建一个虚荣 URL/ 干净的 url。 .htaccess 重写规则工作正常,但我遇到了子目录问题。

特别是,当有人输入 example.com/user 时,它工作得非常好,并从页面 example.com/profile.php?username=user 获取数据。 但是当有人浏览时,example.com/subdirectory/user,这也显示了example.com/profile.php?username=user的内容。

我怎样才能将重写规则限制在我的根目录而不是它的子目录,这样当有人浏览 example.com/subdirectory/user 时,如果没有这样的文件,他们将像往常一样被重定向到 404 Not found 或者该子目录中的文件夹。

.htaccess代码如下:

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)/?$ profile.php?username= [L]

[^\.]+ 是一个糟糕的占位符,几乎可以匹配任何内容(包括路径段)。

由于用户名可能是字母数字,\w+ 更合适:

RewriteRule ^(\w+)/?$ profile.php?username= [L]

顺便说一句,通常你会想要像 /user/name… 这样的更多说话路径,而不是在站点根目录中进行魔法查找。