我有以下目录结构:
/html
.git
project-folder
build
index.html
.htaccess
apache 服务器将该目录/html
视为域的根文件夹https://example.com
。
我应该输入什么.htaccess
才能将其index.html
视为域的根索引https://example.com
?
DirectoryIndex能帮上忙吗?如果能,那么如何编写RewriteRule
然后RewriteCond
?
不是,这只会对根目录本身的请求有帮助,而不会对 有帮助
/<something>
。这应该保留为默认值,以便index.html
从请求的目录(包括/html/project-folder/build
)提供服务。例如:我假设您不需要
/build
公开访问子目录之外的任何内容。我还假设您使用的是 Apache 2.4(而不是 Apache 2.2)。这里有两种方法,取决于您将有一个还是两个
.htaccess
文件。第二种方法是在/build
子目录中。.htaccess
文档根目录中有一个文件在根
.htaccess
文件(at/html/.htaccess
)中,您可以在内部将任何尚未针对该子目录的内部请求重写到该子目录。/project-folder/build
任何外部请求都
/project-folder/build
需要从外部重定向回根(或完全阻止)。例如:
REDIRECT_STATUS
指令中使用环境变量RewriteCond
可确保我们仅检查直接(外部)请求,而不检查内部重写(由其他规则执行)。不过,在这个有限的示例中,END
第二条规则上标志的使用使此检查变得多余。两个
.htaccess
文件(一个在文档根目录中,一个在项目子目录中)如果项目(目录)有自己的
.htaccess
文件并且也包含 mod_rewrite 指令,则需要这样做。在这种情况下,返回根目录的外部重定向需要位于项目文件夹的
.htaccess
文件中(而不是根.htaccess
文件中),这是因为 mod_rewrite 指令不会被继承(默认情况下)。例如:
在这种情况下,上述规则中是否使用
L
或并不重要。END
乍一看,上述重定向可能看起来像是重定向回自身,但请注意,捕获的 URL 路径(来自模式
RewriteRule
)是相对于包含该文件的目录的.htaccess
。因此,对 的请求/project-folder/build/<something>
将重定向回/<something>
“根目录”。始终先使用 302(临时)重定向进行测试,以避免潜在的缓存问题。