我终于在我的网站 www.giftdays.jp
上安装了 SSL。它完美无缺。
它像我希望的那样显示绿色挂锁“安全”。
但问题是它只显示在主页上。每当我访问其他页面(如产品页面和所有页面)时,绿色挂锁都消失了,只在圆圈内显示感叹号。 (它不显示 NOT SECURED WITH CROSSED HTTPS)。
从 chrome 打开检查后,我收到 MIXED CONTENT 错误。
这是确切的错误。
“混合内容:位于“https://www.giftdays.jp/products/list.php?mode=search&sps=5”的页面已通过 HTTPS 加载,但请求了不安全的图像“http://www.giftdays.jp/special/list_header/happywedding/images/happywedding.png”。此内容也应通过 HTTPS 提供。”
虽然我的网站是通过 HTTPS 加载的,但为什么它没有显示绿色挂锁?
通过谷歌搜索,我最终发现有人发布了一些 htaccess 帖子,我将其添加到我的 htaccess 并上传到服务器。我添加的代码是:
RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
但网站其他页面没有变化。
这是我的 htaccess 文件中的内容:
# 基本は SC_Initial.php で設定するが、ini_setで反映されないものはここで設定する
php_value mbstring.language Japanese
php_flag mbstring.encoding_translation off
php_value output_handler none
php_flag magic_quotes_gpc off
php_flag session.auto_start 0
# INI_ALL なのにもかかわらず, ini_set で指定しても反映されない環境がある...
php_value mbstring.internal_encoding UTF-8
# デフォルトテンプレートの状態で 2M 近くになるため
php_value upload_max_filesize 5M
#php_value post_max_size 8M
php_flag register_globals off
RewriteEngine on
Options -Indexes
###################
# メンテナンス中
###################
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !^/503.php
RewriteCond %{REQUEST_URI} !^/maintenance.html
RewriteCond %{REQUEST_URI} !^/Gds1q2w3eAdmin/
RewriteCond %{REQUEST_URI} !^/user_data/
RewriteCond %{REMOTE_ADDR} !=114.179.83.200
RewriteCond %{REMOTE_ADDR} !=54.250.233.6
RewriteCond %{TIME_YEAR}%{TIME_MON}%{TIME_DAY}%{TIME_HOUR}%{TIME_MIN} >201403311500
RewriteCond %{TIME_YEAR}%{TIME_MON}%{TIME_DAY}%{TIME_HOUR}%{TIME_MIN} <201406011000
RewriteRule ^.*$ /503.php [L]
###################
# 通常使用
###################
RewriteRule ^guide/(.*)$ user_data/guide/$1
RewriteRule ^products/shop_map.php user_data/products/shop_map.php
RewriteRule ^concierge/.* user_data/concierge/$1
RewriteRule ^original/(.*)$ user_data/original_catalog/$1
RewriteRule ^gift/(.*)$ user_data/gift/$1
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
#商品ページのURL書き換え
RewriteRule ^gifts/([0-9]+)/$ products/detail.php?product_id=$1 [QSA,L]
RewriteRule ^gifts/([0-9]+)/shop_map.php user_data/products/shop_map.php
#カタログページのURL書き換え
RewriteRule ^catalog/price-([0-9]+)/$ user_data/catalog/list.php?catalog_type_id=1&catalog_id=$1 [QSA,L]
RewriteRule ^catalog/theme-([0-9]+)/$ user_data/catalog/list.php?catalog_type_id=2&catalog_id=$1 [QSA,L]
RewriteRule ^catalog/(.*)$ user_data/catalog/$1
#有効性テスト用
# Redirect /api/ http://www.google.com
#Pマーク指摘対応
RewriteCond %{REQUEST_URI} .*/contact/.*$ [OR]
RewriteCond %{REQUEST_URI} .*/entry/.*$ [OR]
RewriteCond %{REQUEST_URI} .*/gift/.*$ [OR]
RewriteCond %{REQUEST_URI} .*/mypage/.*$
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
RewriteCond %{HTTP_HOST} ^(www\.)?giftdays.jp$ [NC]
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [NE,L,R=301]
RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
# 404ページ
ErrorDocument 404 /user_data/404.php
经过更多调查,我在 ftp 中的模板文件夹中发现了一些 http。但我猜它们就像 100 多个一样。我应该一个一个地进入并全部更改为 https 还是我可以做些什么来一次更改所有内容? 谢谢
最佳答案
当设置 Apache 将 http 请求发送到 https 时,您不能使用重写引擎。您必须使用重定向指令。
可能您已经为 http 和 https 设置了两个 VirtualHost block 。任何到达 http VirtualHost 的请求都应该重定向到 https URL。
关于.htaccess - 在网站的每个页面上将 HTTP 重定向到 HTTPS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49605172/