我正在使用 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 中。