htaccess - 如何只允许访问其重定向/目录索引中的子文件夹?

时间:2018-04-04 01:35:42

标签: .htaccess

有点混乱。

我在GoDaddy的网站结构如下:

/public_html
 /folder1/
  /index.html
  /folder2/
   /index.html
 /restrictedfolder
 /secretfolder

我在' public_html'内创建了一个.htaccess文件。 root包含以下内容:

DirectoryIndex /folder1/index.html http://example.com

如果我去mysite.com,它会将我引导到folder1并正确显示我的主页。我的URL(对用户)仍然是mysite.com,这就是我想要的。我遇到的问题是:   - 如果我去example.com/folder1(这仍然显示我的index.html)   - 如果我去example.com/restrictedfolder(这仍然显示我的index.html)   - 如果我去example.com/secretfolder(这仍然显示我的index.html)

我确实希望example.com/folder2能够正常工作。

1 个答案:

答案 0 :(得分:1)

从此https://httpd.apache.org/docs/2.4/mod/mod_dir.html

  

DirectoryIndex指令设置要查找的资源列表,   当客户端通过指定/来请求目录的索引时   在目录名称的末尾。 Local-url是(%-encoded)的URL   服务器上相对于请求目录的文档;它是   通常是目录中文件的名称。可能有几个URL   给定,在这种情况下,服务器将返回它的第一个   认定。如果没有资源存在且设置了Indexes选项,   服务器将生成自己的目录列表。

简而言之,如果你提出:

DirectoryIndex index.html

这意味着每当请求定位目标索引(例如此example.com/directory/以及example.com时)服务器将查找index.html文件,否则将发生目录列表,除非您通过其他选项阻止该目录

在您的情况下,您网站的请求将正常转到/folder1/index.html,但是当请求转到目录服务器时,会再次获取此信息,因为您在目标路径前添加了/,所以每当对目录索引的请求仅适用于/folder1/index.html

如果将其更改为DirectoryIndex folder1/index.html,您会注意到,当请求转到目录索引时,即使存在索引页,也会发生目录列表,因为服务器将查找folder1/index.html内部那个目录。

如果您只是尝试在index.html中具有不同内容的任何目录中添加相同的文件夹名folder1/index.html,例如restrictedfolder,那么将会有真正的路径/restrictedfolder/folder1/index.html您这样请求example.com/restrictedfolder/,您会在restrictedfolder/folder1/内看到index.html的内容。

要解决此问题,您可以使用mod_rewritefolder1设为网站root,而无需更改URI。

此外,请不要像这样输入主机名

DirectoryIndex /folder1/index.html http://example.com

该指令仅接受local-uri。

如果你想添加另一个页面,你也可以这样做:

DirectoryIndex   index.html index.php

因此,如果该目录服务器中没有index.html,则会查看index.php,依此类推。