我正在为我的用户创建一个个性化网址/纯净网址。 .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=$1 [L]
答案 0 :(得分:1)
[^\.]+
是一个糟糕的占位符,几乎可以匹配任何内容(包括路径段)。
由于用户名可能是字母数字,因此\w+
更合适:
RewriteRule ^(\w+)/?$ profile.php?username=$1 [L]
顺便说一句,通常您希望有更多{@ 1}这样的口语路径,而不是在站点根目录中进行魔术查找。