使用modrewrite将http更改为https? (不redirect)

这听起来有点疯狂,但是和我一起。 我基本上有一个包含文件,可以说inc-navigation.html ,具有绝对path( http://www.pathtoimage.com/image.com )在每个页面上。 那么,使用SSL,我不能使用相同的包含文件,因为它不是引用https://太痛苦了!

所以,我可能想在浏览器请求一个https页面的时候,使用htaccess做一个url重写HTTP到HTTPS的所有引用。 再次,只是要清楚,我不想“redirect”,只是“replace”。

所以,我有这个….

 RewriteCond %{HTTPS} !=on RewriteRule ^http$ https 

但似乎没有工作。 虽然我可能有语法错误。 :)当然,即使这种事情甚至是可能的!

HTTPS是基于SSL / TLS的HTTP,它保护了传输层,也就是浏览器和Web服务器之间的通信。

mod_rewrite通过redirect在内部或外部重写请求,但只有在浏览器发送请求之后,这种情况已经太晚了。

如果要通过HTTPS连接使用通常以简单HTTP方式托pipe的内容,则可以设置从HTTPS主机到普通HTTP主机的反向代理。 mod_proxy_http默认与Apache 2.x捆绑在一起,将能够重写Location标题的redirect,而不是页面本身(及其链接)的内容。 要做到这一点,你可能不得不看mod_proxy_html ,它应该能够重写页面本身的链接。

这就是说,在你的inc-navigation.html文件中有绝对的链接听起来像是一个devise错误,可能比设置mod_proxy_html更容易做一个search/replace来摆脱这个文件中的绝对链接。

如果您使用的某些绝对链接指向其他主机,则可以使用networkingpath相对引用(以//开头,从而使该scheme相对)。 这当然只有当这些主机启用HTTPS时才起作用。

你不能这样做,因为你需要访问者的networking浏览器来理解它应该使用安全(https)连接来获取这些项目,而这是不可能的,如果你从访问者隐藏新的位置(这是你所做的当您使用RewriteRule没有redirect)。

我认为你最好的select是将include文件改为使用不指定域或协议的绝对path。 换句话说,在包含文件更改中:

 http://www.domainname.com/path/to/image/image.png 

 /path/to/image/image.png 

处处都出现这样的模式。

你有语法有点错误,这是你需要的

  RewriteCond %{HTTPS} !on [NC] RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]