我开发了一个网站,其结构可以概括如下:
htdocs
.htaccess
...
wp-content
...
uploads
...
Private
.htaccess
...
我需要从网站内的“仅限会员”访问“私人”目录中的文件,但要保护这些文件不被直接访问。例如,如果我在 Web 浏览器中输入以下内容,我可以直接访问文档:
http://www.Mywebsite.com/wp-content/uploads/Private/Admin-Accounts.xls
我认为可以通过在文件中包含以下内容来解决这个问题Private/.htaccess
:
order deny,allow
deny from all
但是,似乎无论文件中的内容是什么Private/.htaccess
,我仍然可以直接访问 Private 目录中的文件。根目录中的文件内容.htaccess
似乎被超越了。
如果我搜索网站,我会.htaccess
在多个目录中找到文件。如何定义正在使用的目录?
答案1
我认为可以通过在文件中包含以下内容来解决这个问题
Private/.htaccess
:order deny,allow deny from all
是的,通常这就是防止直接访问Private
子目录及其内的所有文件所需的全部操作。(除了Order
/Deny
指令已被弃用,您应该Require
在 Apache 2.4 上使用相应的指令 - 但这是一个次要问题。)
根目录中的文件内容
.htaccess
似乎超出了规则。
有可能,但可能性不大。通常,.htaccess
子目录中的文件会覆盖父级文件。
我们需要查看根.htaccess
文件的内容才能进一步调试。
但是,服务器配置中可能.htaccess
没有为该子目录启用覆盖(或者具体来说,仅为根目录启用)。.htaccess
文件处理不是默认行为。必须先使用指令在服务器配置中为相关目录明确启用此功能。尽管通常情况下,为文档根目录AllowOverride
启用覆盖将为整个子目录树启用覆盖。.htaccess
.htaccess
什么决定了正在使用哪一个?
如果.htaccess
为请求的目录树启用了覆盖(如上所述),.htaccess
则将处理特定文件系统路径上的所有文件。通常,顺序如下:父目录到子目录,这样子.htaccess
文件中的指令就会覆盖父目录。但请注意,这可能因模块而异。