Apache 中的系统错误,包括 https 重定向、密码要求和错误文档

Apache 中的系统错误,包括 https 重定向、密码要求和错误文档

在 Apache 2 vhost 中,我有以下配置(在我的情况下,在.htaccess文档根目录中(为简单起见,对于 http:80 和 https:443 相同)

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

为了将任何 http 连接重定向到 https 此外,

ErrorDocument 500 /error.php
ErrorDocument 404 /error.php
ErrorDocument 403 /error.php
ErrorDocument 402 /error.php
ErrorDocument 401 /error.php

生成自定义错误消息。第三个要素是受保护的子文件夹,需要身份验证(.htaccess该文件夹中的每个子文件夹):

AuthType Basic
AuthName "Test"
AuthUserFile  /some/path/to/passwords
Require user joe

一切正常,除了当有人试图检索时http://example.com/protectedfolder,事实上,发生的事情是客户端收到302 Found重定向到的回复https://example.com/error.php

另一方面,

  • https://example.com/protectedfolder导致自定义(即由error.php生成)401如预期的那样。
  • http://example.com/publicfolder导致302重定向到https://example.com/publicfolder,然后301永久重定向到https://example.com/publicfolder/,最后(由于 DirectoryIndex 被禁用)出现自定义403错误。正如预期的那样。
  • 此外, 还会http://example.com/nonexistent导致然后定制,也正如预期的那样。302https://example.com/nonexistent404
  • 如果我禁用该配置,则会立即引发ErrorDocument 401查询,即无需重定向到 https。http://example.com/protectedfolder401

Apache error.log 中没有具体的条目,但问题似乎是因为在 Rewrite 之前评估了 Auth 要求,从而调用了 ErrorDocument,而这仍然是错误的 http??

我需要更改什么才能获得预期的效果,即http://example.com/protectedfolder导致重定向到,https://example.com/protectedfolder并且只有重定向的 URL 才会导致(自定义) 401

答案1

由于您执行无条件重定向从httphttps如果你希望每个人都能访问你网站上的公开信息,那么这是一个坏主意,顺便说一下),那么您应该为:80和创建单独的主机条目:443,并将:80条目指向类似空文件夹的东西——这样您就不会让 mod_auth 与 mod_rewrite 竞争。

相关内容