Apacheredirect到https进行基本身份validation

对于一个老问题,我有一个棘手的问题。

我有一个基于apache的网站,通常应该通过HTTP /端口80访问。但是对于某些需要身份validation的区域(通过.htaccess指定),我希望能够redirect用户https /端口443。

这里的关键是,我希望这总是发生的基本身份validation – 即我不希望重新创build每个htaccess文件与redirect指令。 我只想强制执行这个基本身份validation(其他stream量应该是未encryption的)。 保护区遍布整个工地。 有可能以某种方式将所有基本身份validation请求redirect到SSL主机?

我不认为有可能自动将HTTP请求与基本身份validationredirect到某个位置 – 至less不能单独使用Apache httpd。

但是您可以使用Location块内的SSLRequireSSL指令来强制客户端使用HTTPS,否则会出现错误403。

我终于弄清楚这是如何在我们的一个服务器上完成的(丑陋的黑客警报)。

我们基本上禁止在非SSL(端口80)主机的节中使用.htaccess文件。 这会在碰到.htaccess文件时产生500错误。

我们将所有500个错误redirect到允许使用.htaccess文件的SSL主机。 “真正的”500错误消息大概也会在SSL方面失败,而.htaccess相关的redirect现在在启用SSL的一方起作用。

是的 – 很丑。 我不想复制这个,但我想我会通过这一点。

在使用基本身份validation访问的目录中的.htaccess文件中,input:

SSLRequireSSL ErrorDocument 403 /erreurs/403.php ErrorDocument 401 /erreurs/401.php 

这将使用http将访问者redirect到401或403错误页面。

在这些页面中,把这个:

 <?php $path = $SERVER['REQUEST_URI']; if($_SERVER["HTTPS"] != "on") { header('HTTP/1.1 301 Moved Permanently'); header('Status: 301 Moved Permanently'); header('Cache-Control: max-age=31536000'); header('Content-Language: en'); header('Location: https://www.example.com/'.$path.''); echo '<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"/><title>301 Moved Permanently</title></head><body><h1>Moved Permanently</h1><p>The document has moved <a href="'.$path.'">here</a></p></body></html>'; } else { echo '<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"/><title>Forbidden</title></head><body><h1>Forbidden</h1><p>Forbidden</p></body></html>'; } ?> 

基本身份validation将redirect到HTTPS。