如何强制 Apache 对 http 请求做出 403 响应?

如何强制 Apache 对 http 请求做出 403 响应?

我正在使用 Apache 作为正在构建的 RESTful 服务的前端。对该服务的所有访问都应通过 HTTPS 进行,因此我希望 Apache 对所有 HTTP 访问都做出 403 消息响应,表明需要安全访问。

我该如何配置 Apache 来实现这一点?

<VirtualHost *:80>
        ServerName api.digiumcloud.net
        # Stuff to force 403 responses here
</VirtualHost>

答案1

我认为最好的办法可能是将用户重定向到 HTTPS。但要实现您的目标,我认为以下方法应该可行:

RewriteEngine on
RewriteRule /403-message.html - [L]
RewriteRule ^(.*)$ /403-message.html [L,R=403]
ErrorDocument 403 http://api.digiumcloud.net/403-message.html

当然,你必须创建一个 403-message.html 文件,其中包含你想要的内容。

但要重定向到 HTTPS:

RewriteEngine on
RewriteRule ^(.*)$ https://api.digiumcloud.net/$1 [L,R]

答案2

添加 SSLRequireSSL

它不是 HTTPS,所以它总是会导致禁止 403 错误

使用类似方法将 HTTP 重定向到 HTTPS...

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule . https://%{SERVER_NAME}%{REQUEST_URI} [R,L]

是更好的解决方案,并且不对服务器或 URI 进行硬编码,而是将 URI 作为重定向的一部分进行预先服务。

但是您必须在服务器配置中执行此操作,而不是在“.htaccess”中执行此操作。

如果您在“.htaccess”中使用身份验证,则身份验证发生在重定向之前(密码以明文形式通过 HTTP 发送)。

服务器配置没有该问题,因为 HTTP 和 HTTPS 指令可以放在单独的 VHost 中。

相关内容