无尾部斜杠访问子目录且缺失index.html时调用index.php的.htaccess配置问题咨询
解决子目录无斜杠访问及index.php fallback问题
让我们一步步搞定这个配置问题:
首先,你的根目录.htaccess目前只处理了index.html的加载逻辑,完全没考虑index.php的场景,这就是无法调用index.php的核心原因。另外,我们还要确保根目录的规则不会干扰/blog/下WordPress的独立配置——毕竟它有自己的.htaccess在处理请求。
修改根目录的.htaccess配置
替换根目录下的现有配置为以下内容:
RewriteEngine on ErrorDocument 404 /error/error404.html DirectorySlash Off # 排除/blog/开头的请求,交给它自身的.htaccess处理 RewriteRule ^blog/ - [L] # 优先检查并加载index.html(如果存在) RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}/index.html -f RewriteRule ^(.*)$ /$1/index.html [L] # 若index.html不存在,检查并加载index.php(如果存在) RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}/index.php -f RewriteRule ^(.*)$ /$1/index.php [L]
配置说明
RewriteRule ^blog/ - [L]:这条规则是关键——任何以/blog/开头的请求,直接停止根目录后续规则的处理,完全交给WordPress的独立配置去处理,避免规则冲突。DirectorySlash Off:保留你原本的配置,确保访问子目录时不会自动添加尾部斜杠,满足example.com/blog而非example.com/blog/的需求。- index.html优先逻辑:先检查请求对应的子目录下是否存在
index.html,如果存在就加载它;如果不存在,才会进入下一条规则。 - index.php fallback逻辑:当
index.html不存在时,检查是否存在index.php,如果存在则加载它,完美匹配你的需求。
/blog/.htaccess无需修改
WordPress自动生成的配置已经能正确处理自身的请求,加上根目录规则已经排除了/blog/的请求,两者不会互相干扰,可以保持原样。
内容的提问来源于stack exchange,提问作者Nico Real
相关产品推荐
相关产品推荐

