我有一个非常具体的问题,我正在建立的一个网站,是设置为使用友好的网址和自定义错误页面。我已经阅读了几天的留言板,虽然有很多类似的看似职位,没有解决这个问题具体...至少在我的新手的眼睛。
大多数情况下,我的网站上的一切都运行良好:
- 像“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");
}
?>
任何帮助都将不胜感激!
1条答案
按热度按时间fnvucqvd1#
这只是默认Apache响应:您没有权限浏览此页面,可能您没有权限使用此页面。
可能是服务器配置中定义的规则(可能是mod_security)阻止了此类请求。这里的问题是
.htaccess
中定义的ErrorDocument
太晚,无法提供自定义响应。您需要在服务器配置中 * 更早 * 定义ErrorDocument
。如果您使用的是共享服务器,则需要联系您的主机以进一步调试。