有点混乱。
我在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能够正常工作。
答案 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_rewrite
将folder1
设为网站root,而无需更改URI。
此外,请不要像这样输入主机名
DirectoryIndex /folder1/index.html http://example.com
该指令仅接受local-uri。
如果你想添加另一个页面,你也可以这样做:
DirectoryIndex index.html index.php
因此,如果该目录服务器中没有index.html
,则会查看index.php
,依此类推。