如何将同名目录请求重定向到对应HTML文件(地址栏无后缀)
Apache重写规则配置方案
问题场景
存在example.com/test目录与example.com/test.html文件,需求为访问example.com/test时加载该HTML文件,且地址栏不显示.html后缀。现有规则跳转至服务器物理路径(如example.com/home/a0987901/domains/example.com/public_html/test/),不符合预期。
问题分析
原规则未正确区分目录请求与文件匹配逻辑,且使用$0变量结合绝对路径重写时,在目录与文件同名场景下,Apache的目录优先级处理逻辑导致物理路径暴露。
正确配置
替换原有规则为以下内容:
DirectorySlash Off RewriteEngine On # 仅当请求不是真实文件,且对应HTML文件存在时执行重写 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}.html -f RewriteRule ^(.*)$ $1.html [L]
配置说明
DirectorySlash Off:禁用Apache自动为目录请求添加斜杠的默认行为,避免触发目录索引逻辑RewriteCond %{REQUEST_FILENAME} !-f:排除已存在的真实文件请求,防止对现有静态文件的不必要重写RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}.html -f:检查请求路径对应的.html文件是否存在RewriteRule ^(.*)$ $1.html [L]:内部重写请求至对应的HTML文件,[L]标记终止后续规则处理,且无外部跳转(地址栏保持原路径)
内容的提问来源于stack exchange,提问作者ka4ergaa
相关产品推荐
相关产品推荐

