如何将 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…
这样的更多说话路径,而不是在站点根目录中进行魔法查找。
我正在为我的用户创建一个虚荣 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…
这样的更多说话路径,而不是在站点根目录中进行魔法查找。