隐藏对目录的公共访问,但允许通过RewriteRule

时间:2017-10-12 19:56:33

标签: apache .htaccess

我有以下结构:

public_html/
  hidden_directory/
    sub_folder/
      sample_file.txt
      other_file.txt
    another_folder/
      another_file.txt

我的最终目标是仅通过重定向显示hidden_directory的内容。我第一次尝试将它们放在public_html之外是不成功的。然后我尝试了上面看到的结构,像

这样的重定向
RewriteRule ^sub/(.*) hidden_directory/sub_folder/$1 [L]

通过以下方式访问:

http://mysite/sub/sample_file.txt

这非常有效,从我想要的文件位置和URL中提供了我想要的内容。但我不喜欢那些文件也可以从以下网址获得:

http://mysite/hidden_directory/sub_folder/sample_file.txt

我确实做了

deny from all
hidden_directory中的

,并且停止了我想要的直接访问,尽管它也打破了重写。

是否有任何htaccess解决方案我可以将这些文件放在一个文件夹中,该文件夹无法直接访问但仍可通过重写进行访问?

1 个答案:

答案 0 :(得分:1)

  

是否有任何htaccess解决方案我可以将这些文件放在一个文件夹中,该文件夹无法直接访问但仍可通过重写进行访问?

是使用基于THE_REQUEST变量的规则阻止对hidden_directory的直接访问:

RewriteEngine On

# block direct access to a given path
RewriteCond %{THE_REQUEST} \s/+hidden_directory[/?\s] [NC]
RewriteRule ^ - [F]

RewriteRule ^sub/(.*)$ hidden_directory/sub_folder/$1 [L,NC]

THE_REQUEST变量表示Apache从您的浏览器收到的原始请求,并且在执行某些重写规则后不会被覆盖。此变量的示例值为GET /index.php?id=123 HTTP/1.1