无法在apache RewriteRule中找到协议变量

时间:2017-03-14 17:38:05

标签: apache .htaccess mod-rewrite

我的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,但我不确定是否有。

1 个答案:

答案 0 :(得分:2)

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

但是我不建议使用它,因为我尝试了它并且它是错误的,在某些情况下甚至使用HTTPS它会掩盖它使用HTTP所以你应该在线使用其他替代品。