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

含"/ /"或"%20/"的URL无法加载自定义403错误页面求助

解决方案

问题根源

当请求包含空格+尾斜杠的路径(如/ /、/folder/%20/)时,Apache会将其识别为目录请求,但该目录实际不存在,因此直接触发403错误;同时原配置中ErrorDocument使用绝对HTTPS URL,可能导致内部跳转被拦截,无法加载自定义403页面。而无尾斜杠的请求会被Rewrite规则捕获,进入index.php处理,返回预期的404。

步骤1:修复ErrorDocument配置

将绝对URL改为相对路径,确保Apache内部加载自定义403页面,而非外部重定向:

# 替换原有的ErrorDocument行
ErrorDocument 403 /403.php

步骤2:拦截异常路径,强制进入PHP路由

在友好URL规则前添加Rewrite规则,拦截所有包含空格的请求,强制交由index.php处理,避免Apache直接触发403:

RewriteEngine On
RewriteBase /

# 拦截含空格的异常路径,优先进入PHP路由
RewriteCond %{REQUEST_URI} \s
RewriteRule ^(.*)$ index.php?$1 [L,QSA,NC]

# The Friendly URLs part
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?$1 [L,QSA,NC]

步骤3:优化PHP路由逻辑

修改index.php,识别纯空格/空内容的异常路径,返回404而非首页:

<?php

// 获取原始请求路径,判断是否为纯空格/空的异常路径
$requestUri = trim($_SERVER['REQUEST_URI'], '/');
$URL = explode("/", $_SERVER['QUERY_STRING']);

// 拦截仅含空格的异常请求
if ($requestUri !== '' && trim(str_replace('/', '', $requestUri)) === '') {
    require_once("404.php");
    exit;
}

// 原有路由逻辑
if (trim($URL[0]) == "index" || trim($URL[0]) == ""){
    require_once("home.php");
} else if (file_exists(strtolower(trim($URL[0])).".php")) {
    require_once(strtolower(trim($URL[0])).".php");
} else {
    require_once("404.php");
}
?>

验证效果

  • 访问example.com/ /或example.com/folder/%20/时,会进入index.php的异常拦截逻辑,返回404页面
  • 常规无索引文件夹请求(如example.com/folder)仍正常触发403并加载自定义403.php
  • 其他友好URL功能保持正常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 16:48:24