Apache 2.4 mod_rewrite配置:目录根路径需等效index.html访问
Apache 2.4 .htaccess 配置解决方案
需求回顾
位于somedir目录下的.htaccess,需实现:
- 拒绝访问目录内所有内容
- 仅允许访问
index.html和403.html - 访问
http://.../somedir或http://.../somedir/时,效果等同于直接访问index.html
原配置问题
原配置未处理目录本身的请求(即不带文件名的访问),且规则条件未精确匹配目标文件,可能导致误匹配。
修正后的配置
RewriteEngine On # 处理目录请求:访问somedir或somedir/时,内部重写到index.html RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^ index.html [L] # 放行允许访问的文件:index.html和403.html RewriteCond %{REQUEST_URI} /index\.html$ [NC,OR] RewriteCond %{REQUEST_URI} /403\.html$ [NC] RewriteRule ^ - [L] # 所有其他请求重定向到403.html RewriteRule ^ 403.html [L]
配置说明
- 目录请求处理:
%{REQUEST_FILENAME} -d判断当前请求是目录,此时内部重写到index.html,后续规则会识别这个请求并放行。 - 精确放行文件:用
/index\.html$确保仅匹配以index.html结尾的请求,避免误匹配类似xxxindex.html的文件;[NC]表示忽略大小写。 - 默认拒绝规则:所有未被前面规则放行的请求,都重定向到
403.html。
额外说明
- 无需使用
DirectoryIndexRedirect,该指令作用是将目录请求重定向到指定文件的URL(外部跳转),而我们需要的是内部重写(地址栏不变)。 - 原配置中多余的
RewriteCond %{REQUEST_URI} "^.*$"可以删除,该条件恒为真,没有实际筛选作用。
内容的提问来源于stack exchange,提问作者Dave Hennessey
相关产品推荐
相关产品推荐

