在 apache2 虚拟主机中将特定 URL 从 HTTP 排除到 HTTPS 重定向

在 apache2 虚拟主机中将特定 URL 从 HTTP 排除到 HTTPS 重定向

我正在寻找一种简单的配置来从我的 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 访问而不是重定向此类凭证关键请求?

相关内容