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

时间:2019-05-15 07:00:22

标签: php .htaccess mod-rewrite root subdirectory

我正在为我的用户创建一个个性化网址/纯净网址。 .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]

1 个答案:

答案 0 :(得分:1)

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

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

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

顺便说一句,通常您希望有更多{@ 1}这样的口语路径,而不是在站点根目录中进行魔术查找。