如何在使用SSLRequireSSL + ErrorDocument时避免URLredirect

好的,所以我有一个我正在使用的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

但是,对于错误页面的改进,希望从./error加载一个php文件,并在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 

但是,将客户端redirect到https://site.tld/error/script.php ,这是UNDESIRED,因为他们必须重新inputurl,因此无法将http更改为https

所以,我想我必须做下面的一个:

  • EXCLUDE ./error从SSL要求与一些.htaccess处理
  • 构build一个REWRITE规则来检测错误页面的使用,而不会重写URL

昨天我无法做这件事。 也许这两个选项都不可行,但是我坚持要做什么。

我如何指示.htaccess允许http连接在./error ,或其他一些修复,所以我仍然得到我的错误页面,但客户仍然保持原来的url?

好的,现在是我的修补程序。

我有一个文件夹结构如下:

 / (web root) | |- .htaccess |- index.php | |- error |- dir1 |- dir2 ~ |- dir(n - 1) `- dir(n) 

在(网站根).htaccess我有以下几点:

 Options -Indexes ErrorDocument 403 /error/script.php 

并且在任何子目录的文件夹(EXCEPT FOR / error /)中:

 SSLOptions +StrictRequire SSLRequireSSL 

这使我可以加载没有SSL的错误页面,但仍然强制执行每隔一个文件夹。 漂亮吗? 不,我希望能够从根的.htaccess控制这个。 但这是我迄今为止唯一得到的工作。

如果您能find更好的解决scheme,请在此处发布您的工作。