为特定的 url 设置从 http 到 https 的 apache 重定向

Posted

技术标签:

【中文标题】为特定的 url 设置从 http 到 https 的 apache 重定向【英文标题】:Set apache redirect from http to https for a specific url 【发布时间】:2012-04-05 14:43:12 【问题描述】:

我想将任何具有 /test 的 URL 路径重定向到 https://localhost/test。此外,如果 url 是 /test?user=123 它必须重定向到 https://localhost/test?user=123 或者如果 url 是 /test/test_db/user?id=123&pwd=123 必须重定向到 https://localhost/test/user/test_db/user?id=123&pwd=123

任何类型的所有其他请求都必须重定向到根文件夹 (http://localhost/accessdenied.html) 中显示“拒绝访问”的 html 页面。

如何在 apache 中使用 RedirectMatch 来实现这一点。我尝试了类似的东西

RedirectMatch permanent ^test/(.*)$ https://localhost/test/$1

这不起作用。

【问题讨论】:

【参考方案1】:

我想知道这是否更好作为 ServerFault 问题。

无论如何: 我不知道如何使用 RedirectMatch 实现这一点,但我知道如何使用 ModRewrite 做到这一点:

RewriteEngine On$
RewriteCond %HTTPS off$
RewriteRule ^/bla https://%HTTP_HOST%REQUEST_URI [R=301,L]$

这是一种相当通用的形式,适用于任何 HTTP 主机(因为我不知道有关您的主机的任何详细信息),并将重定向与 URL 开头的 bla 匹配的任何内容,而不是已经是 Https,带有参数和一切。

【讨论】:

这对我有用,它回答了这个问题。我认为这应该被@Abhishek 标记为接受,即使它已经超过一年了。 不要在行尾为我添加 $ RewriteRule ^/yourpath https://%HTTP_HOST%REQUEST_URI [R=301,L]【参考方案2】:

这在我的 Apache httpd 2.2 服务器上非常适合我:

RedirectMatch 301 ^(/someprefix[^/]*/.*)$ https://hostname$1

【讨论】:

以上是关于为特定的 url 设置从 http 到 https 的 apache 重定向的主要内容,如果未能解决你的问题,请参考以下文章

如何在 lighttpd 中为特定域设置 HTTP 到 HTTPS 重定向?

如何在 Apache httpd 中将特定 URL 路由到 http 和 https 以及其他 URL 到 https

IIS URL将Http重写为Https,排除单个URL

仅针对某些特定页面将非 www/http 强制为 www/https

仅针对 nginx 上的特定 url 使用 https 重定向

从 http 重定向到 https 时,从 url 中删除斜线