You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP站点如何将含多斜杠的拼写错误URL强制跳转至index.php

问题根源

  1. 当前配置同时混用了ErrorDocument、FallbackResource和多组重写规则,逻辑冲突导致重定向循环
  2. Apache默认开启AcceptPathInfo,会把index.php/xxx/yyy这类路径中/xxx/yyy部分当成路径参数传给index.php,不会触发404,所以出现地址不变、CSS因相对路径加载失败的问题
  3. 重写规则顺序不合理,后缀去斜杠、异常路径跳转的规则优先级不足

修复后的完整.htaccess代码

# 关闭PathInfo,避免index.php后接路径被当成参数传入
AcceptPathInfo Off

ErrorDocument 404 /mkv4/index.php 
ErrorDocument 500 /mkv4/index.php 

RewriteEngine On
# 指定子目录重写基础路径,适配站点部署在/mkv4子目录的场景
RewriteBase /mkv4/

# 1. 优先处理尾部斜杠跳转,避免目录识别异常
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)/$ $1 [R=301,L] 

# 2. 保留原有projekt伪静态规则
RewriteCond %{REQUEST_FILENAME} !-d  
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^projekt/([0-9a-zA-Z_-]+) projekt.php?projekt_url=$1 [NC,L]  

# 3. 排除真实存在的文件/目录/软链接,不做跳转
RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^.*$ - [NC,L] 

# 4. 所有不存在的路径统一301跳转到index.php,同步更新地址栏
RewriteRule ^.*$ index.php [R=301,L]

修复说明

  • 场景2无限重定向:删除了冲突的FallbackResource和跳转404.php的重复规则,指定RewriteBase避免子目录跳转路径错误
  • 场景3地址不变无样式:关闭AcceptPathInfo后index.php/xxx这类路径会被判定为不存在,直接触发301跳转到index.php,地址栏更新后CSS相对路径也会正常加载
  • 原有正常跳转的场景1不受影响

测试前请清空浏览器缓存,301重定向会被浏览器永久缓存,避免旧缓存干扰测试。如果需要进一步避免CSS路径异常,可以把CSS引用路径改为站点根路径绝对路径,比如/mkv4/css/style.css。


内容的提问来源于stack exchange,提问作者vexqus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 00:54:04