使用htaccess重定向root,但仍然可以通过后门访问目录列表

时间:2013-04-23 19:32:24

标签: .htaccess directory-listing

我认为我试图做的是天才,但它似乎无法正常工作。

我有一个包含临时文件的公共子域。我不希望人们在访问它时看到列出的所有文件。我不想密码保护它,因为当从服务器上取文件时会弄乱几个脚本,我不希望那里的空白index.html停止列表,因为我希望能够看到列表。

所以我的天才之笔就是拥有一个.htaccess这样的文件:

RewriteEngine On
RewriteCond %{REQUEST_URI} !/#dir
RewriteCond %{REQUEST_URI} !/?show=dir
RewriteRule ^$ http://example.com/ [nc]

我的理论是,访问files.example.com会重定向到example.com,但访问files.example.com/?show=dirfiles.example.com/#dir则不会;显然,由于?show=dir什么都不做,它会像往常一样列出我的所有文件。

我的RewriteConditions无效。

这可能吗?

1 个答案:

答案 0 :(得分:2)

首先,您无法匹配URL片段(#dir部分),因为它不会被发送到服务器。这只是客户方面的事情。

其次,您无法与?show=dir变量中的查询字符串(%{REQUEST_URI}部分)匹配,而是需要使用%{QUERY_STRING}

所以试试:

RewriteEngine On
RewriteCond %{QUERY_STRING} !^show=dir$
RewriteRule ^$ http://example.com/ [nc]