.htaccess 当URL包含“/ /”时,无法加载自定义错误页面

kuhbmx9i  于 2022-11-16  发布在  其他
关注(0)|答案(1)|浏览(131)

我有一个非常具体的问题,我正在建立的一个网站,是设置为使用友好的网址和自定义错误页面。我已经阅读了几天的留言板,虽然有很多类似的看似职位,没有解决这个问题具体...至少在我的新手的眼睛。
大多数情况下,我的网站上的一切都运行良好:

  • 像“example.com/main/variable/variable“这样的URL可以正常工作(重定向到example.com/index.php,在内部加载main.php,并将变量拉入数组)
  • 404错误由index.php处理,工作正常
  • 403错误,当你尝试访问一个没有索引页的子文件夹大多工作正常太:403example.com/folder403错误页面403错误页面403.php

我遇到麻烦的地方是,如果URL被破坏,包含一个空格,后面跟着一个正斜杠:

  • “或example.com/“example.com/folder/”
  • “example.com/%20/“或“example.com/folder/%20/“

当这种情况发生时,会触发一个403错误,但它不会加载自定义的403.php页面。
值得注意的是,如果URL缺少尾部斜杠,则不会发生此问题:

  • “example.com/“或“example.com/%20“
  • “example.com/folder/“或“example.com/folder/%20“的名称

这些都触发了404错误而不是403错误,这是我希望在包含尾部斜杠时发生的情况。
我知道这是一个非常特殊的情况,只有当有人在输入网址的时候把它弄坏了才会发生,但我希望它不会发生。我和我的网站主机谈过了,他们说他们这边一切都是正确的。
下面是我当前在/public-html/目录下的.htaccess中运行的代码:

ErrorDocument 403 https://www.example.com/403.php

# Begin EnforceSSL 
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L]
</IfModule>
# End EnforceSSL

RewriteEngine On
RewriteBase /

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

下面是index.php中处理友好URL的代码:

<?php

// Create a URL array containing any passed variables, including requested page
$URL = explode("/", $_SERVER[QUERY_STRING]);

// Load the page
if (trim($URL[0]) == "index"){
    require_once("home.php");
} else if (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");
}
?>

任何帮助都将不胜感激!

fnvucqvd

fnvucqvd1#

这只是默认Apache响应:您没有权限浏览此页面,可能您没有权限使用此页面。
可能是服务器配置中定义的规则(可能是mod_security)阻止了此类请求。这里的问题是.htaccess中定义的ErrorDocument太晚,无法提供自定义响应。您需要在服务器配置中 * 更早 * 定义ErrorDocument
如果您使用的是共享服务器,则需要联系您的主机以进一步调试。

相关问题