.htaccess配置问题:URL空路径错误跳转至404页面
修复.htaccess实现仅允许访问主域名的配置方案
问题现状
当前配置访问主域名时会错误跳转到404.php?cp=index.php,且无法禁止直接访问index.php或其他后缀路径,需要调整规则逻辑实现以下需求:
- 强制所有请求走HTTPS
- 任何非根路径(如
domain.com/index.php、domain.com/xxx)都301重定向到domain.com/ - 根路径内部静默重定向到
index.php,禁止用户直接访问该文件
修复后的.htaccess配置
RewriteBase / RewriteEngine On Options -Indexes # 强制HTTPS跳转 RewriteCond %{HTTPS} !=on RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] # 禁止直接访问index.php,重定向到根域名 RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/ RewriteRule ^index\.php$ / [L,R=301] # 任何非根路径都重定向到根域名 RewriteRule ^.+$ / [L,R=301] # 根路径内部重定向到index.php RewriteRule ^$ index.php [L]
规则说明
- 强制HTTPS:把所有HTTP请求301重定向到HTTPS版本,后续规则会统一处理路径问题
- 禁止直接访问index.php:匹配用户手动输入
domain.com/index.php这类请求,直接重定向到根域名 - 非根路径重定向:匹配任何非空的路径(单文件名、多级路径都包含),全部301重定向到根域名
- 根路径内部跳转:当请求是
domain.com/时,内部静默转发到index.php,用户地址栏不会显示该文件名
原配置问题原因
原配置中,根路径规则RewriteRule ^$ index.php [L]的[L]标记仅终止当前循环,但内部重定向后请求会再次进入规则链,此时路径变为index.php,触发了下方的RewriteRule ^([^/]+)$ 404.php?cp=$1规则,导致错误跳转。调整规则顺序后,先处理所有外部重定向需求,最后执行内部跳转,彻底避免循环冲突。
内容的提问来源于stack exchange,提问作者Jelly
相关产品推荐
相关产品推荐

