【问题标题】:Cant find protocol variable in apache RewriteRule在 apache RewriteRule 中找不到协议变量
【发布时间】:2017-03-14 17:38:04
【问题描述】:

我的 htaccess 文件中有以下规则:

RewriteRule ^(.*)$ https://example.com/?http://%{HTTP_HOST}%{REQUEST_URI}?%{QUERY_STRING} [NE,R=302,L]

但我想根据使用的协议(HTTP 或 HTTPS)重定向用户。我试过这个:

RewriteRule ^(.*)$ https://example.com/?%{SERVER_PROTOCOL}://%{HTTP_HOST}%{REQUEST_URI}?%{QUERY_STRING} [NE,R=302,L]

但用户被重定向到“https://example.com/?HTTP/1.1://example.com/anything?anything

我不想将 RewriteCond 用于这样的简单任务,是否有任何变量可以用于此,我的意思是,返回 http 或 https?我在这里查了http://httpd.apache.org/docs/current/mod/mod_rewrite.html,但不确定是否有。

【问题讨论】:

  • 你的意思是 %{REQUEST_SCHEME} 吗?
  • 是的 :) 请发表我会批准的答案,谢谢!

标签: apache .htaccess mod-rewrite


【解决方案1】:

因为我要求用户 @starkeen 发表他的评论作为答案,但他没有发表,所以我在这里发布。要捕获所用协议的 HTTP 或 HTTPS 部分,您可以使用 %{REQUEST_SCHEME}。

但是我不建议使用它,因为我试过了,但它有问题,在某些情况下,即使使用 HTTPS,它也掩盖了它使用的是 HTTP,所以你应该在线使用其他替代方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-08
    • 1970-01-01
    • 1970-01-01
    • 2011-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多