我试图仅在yii框架网站的一个页面上强制使用https,并让其余页面为http。强制https的页面是
https://www.mywebsite.com/index.php?r=user/profile
以下内容创建了我想要的内容,但出现混合内容错误。此外,当我从混合内容选项卡转到任何其他选项卡时,它不会自动变为http。它需要移动到另一个选项卡才能达到http状态。
RewriteEngine On
# Go to https
RewriteCond %{HTTPS} off
RewriteCond %{QUERY_STRING} ^r=user/profile$ [NC]
RewriteRule ^(index\.php)$ https://www.mywebsite.com/$1 [R,L]
# Go to http
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_REFERER} !/index\.php\?r=user/profile
RewriteCond %{REQUEST_URI} !^/index\.php$ [OR]
RewriteCond %{QUERY_STRING} !^r=user/profile$ [NC]
RewriteRule ^(.*)$ http://www.mywebsite.com/$1 [R,L]
混合内容错误如下。
Mixed Content: The page at 'https://www.mywebsite.com/index.php? r=user/profile' was loaded over HTTPS, but requested an insecure image 'http://www.mywebsite.com/assets/7a295fc1/nav1_bg.gif'. This content should also be served over HTTPS.
可以看出,yii框架下的资产是导致问题的唯一文件夹。
1.有没有办法以https方式请求从资产中使用的文件,所以我没有收到混合内容错误?
2.有没有办法确保从https选项卡移动到任何其他选项卡会导致立即进行http转换,而不是要求移动到另一个选项卡。 (即主页页面(https)到主页会导致主页有(https)。从主页到配置文件页面以外的任何页面的移动变为(http)。我希望它立即发生。
答案 0 :(得分:2)
问题是您无法通过https连接对任何静态或动态文件发出http请求。
最佳解决方案是将所有内容移至https。
如果不可能,那么另一个解决方案就是这样 - 制作一个代理页面。这将接收https请求并通过http获取内容并通过https提供。