好的,我有一个正在工作的 Apache 主机(共享主机),它的根.htaccess
文件中有这个:
Options -Indexes
SSLOptions +StrictRequire
ErrorDocument 401 "<!DOCTYPE html><html lang='en'> ... "
ErrorDocument 403 "<!DOCTYPE html><html lang='en'> ... "
SSLRequireSSL
因此,当用户尝试不使用 SSL 进行连接时,系统会提示他们403
文件中列出的自定义 html。同时,地址栏中会保留他们的旧 URL,以便他们可以快速添加https
。
但是,为了改进错误页面,需要php
从 加载文件./error
并在 的定义中使用该文件ErrorDocument
。现在,如果直接指定文档,这就是关键所在……
ErrorDocument 403 /error/script.php
他们会得到另一个403
或Additionally, a 403 Forbidden error was encountered while trying to use an ErrorDocument to handle the request.
因为与文件的连接不在 SSL 下。为了解决这个问题,可以尝试这个...
ErrorDocument 403 https://site.tld/error/script.php
但这会将客户端重定向到https://site.tld/error/script.php
不受欢迎的位置,因为他们必须重新输入 URL,因此无法直接更改http
为https
。
因此,我想我必须做以下事情之一:
- 通过一些处理排除
./error
SSL 要求.htaccess
或者 - 构建一个 REWRITE 规则,用于检测错误页面的使用,并且不重写 URL
我昨天没能做到这两件事。也许这两种选择都不可行,但我不知道该怎么做。
我怎样才能指示.htaccess
允许http
连接./error
或进行其他修复,以便我仍然能够收到错误页面,但客户端仍然保留其原始 URL?
答案1
好的,这是我目前的解决方案。
我有一个如下的文件夹结构:
/ (web root)
|
|- .htaccess
|- index.php
|
|- error
|- dir1
|- dir2
~
|- dir(n - 1)
`- dir(n)
在 (web root).htaccess 中我有以下内容:
Options -Indexes
ErrorDocument 403 /error/script.php
在任何子目录的文件夹中(除了/error/):
SSLOptions +StrictRequire
SSLRequireSSL
这样我就可以在不使用 SSL 的情况下加载错误页面,但仍对其他每个文件夹强制执行 SSL。这样方便吗?不,我希望能够从根目录的 .htaccess 控制它。但这是我目前唯一能做到的事情。
如果您能找到更好的解决方案,请在此处发布您的工作。