使用 SSLRequireSSL + ErrorDocument 时如何避免 URL 重定向

使用 SSLRequireSSL + ErrorDocument 时如何避免 URL 重定向

好的,我有一个正在工作的 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

他们会得到另一个403Additionally, 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,因此无法直接更改httphttps

因此,我想我必须做以下事情之一:

  • 通过一些处理排除./errorSSL 要求.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 控制它。但这是我目前唯一能做到的事情。

如果您能找到更好的解决方案,请在此处发布您的工作。

相关内容