我正在寻找一种简单的配置来从我的 apache2 HTTP 到 HTTPS 重定向中排除特定的 URL(模式),但到目前为止失败了。背景是一个具有典型授权机制的 API,它永远不应该通过普通 HTTP 发送,所以如果有人试图通过纯 HTTP 访问 API,我不想重定向,而是返回 403 或 404。我当前的虚拟主机是所有内容的典型重定向:
<VirtualHost *:80>
ServerName example.com
Redirect permanent / https://example.com/
</VirtualHost>
我想要的是跳过类似这样的 URL 的重定向http://example.com/api/(.*)
。真的有必要省略Redirect
-directive 并为这个简单的任务构建一个相当复杂的 mod_rewrite 配置吗?
答案1
好的,实际上我想出了以下我可能接受的解决方案:
<VirtualHost *:80>
ServerName example.com
Redirect gone /api
Redirect permanent / https://example.com/
</VirtualHost>
这似乎/api/(.*)
首先捕获所有请求并返回 410。
我想给出一些背景信息,说明为什么我不想返回简单的 301,以及为什么我认为这很重要。如果有人使用重定向后的 HTTP URL 以他想要的语言调用一个简单的请求模块,则存在潜在的风险,即用户凭据/授权在每次请求时都以未加密的形式通过互联网发送,而没有人注意到。
我不确定其他开发人员如何处理这个问题,但是否有人同意最好阻止 HTTP 访问而不是重定向此类凭证关键请求?