web-dev-qa-db-ja.com

フォルダー全体をhttpからhttpsに変更する方法

checkout/onepageはHTTPSを使用しています。しかし、なぜcheckout/cartはそうではないのですか?

.htaccessのフラグメントを次に示します。

############################################
## enable rewrites

Options +FollowSymLinks
RewriteEngine on
# RewriteCond %{REQUEST_URI} checkout\/onepage
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} checkout/
# RewriteRule ^(.*)$ https://%{HTTP_Host}/$1 [R=301,L]
RewriteRule ^checkout/$ https://idfr.com/checkout/ [R=301,L]

############################################
  • Apacheバージョン:Apache/2.4.7(Ubuntu)
  • オペレーティングシステム:Windows 8.1
  • ログファイルの表示。メインErrorLog: "/var/log/Apache2/error.log"
2
Sonia

/checkout/フォルダーに次のコンテンツを含むhtaccessを配置します。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{SERVER_PORT} !^443$
RewriteRule (.*) https://%{HTTP_Host}%{REQUEST_URI} [R=301,L]
</IfModule>

安全ではない(ポート443に到達しない)すべての要求をhttps- ed urlに書き換えます。

別の方法

PHPコードスニペットに従って、ファイルの1ページとカートの先頭に配置します。

<?php
if ($_SERVER["SERVER_PORT"] != 443) {
$redir = "Location: https://" . $_SERVER['HTTP_Host'] . $_SERVER['PHP_SELF'];
header($redir);
header("HTTP/1.1 301 Moved Permanently");
exit();
}
?>

同じことをします。

1
Evgeniy

私はこの行が問題かもしれないと思う:

RewriteRule ^checkout/$ https://idfr.com/checkout/ [R=301,L]
        ----^     ----^

この行は、URLが「次で始まる」場合は[rewites the url](^および [次で終わる]($)文字列 'checkout'です。 *.のようなワイルドカードがないため、この行は「文字通りcheckout/、他には何もありません」という意味になります。

つまり、checkout/は一致しますが、書き換えルールの条件と一致しないため、checkout/exampleは一致しません

# force ssl
RewriteCond %{SERVER_PORT} ^80$
RewriteCond %{REQUEST_URI} ^/checkout
RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301]

このスニペットは:

  • HTTPの場合(ポート80を使用)
  • また、URLは/checkoutで始まります(サーバーによっては、スラッシュは不要な場合があります)
  • -> httpsバージョンにリダイレクト
1
Martijn