1

ユーザーに httpsとwwwの使用を強制する、一般的なhtaccess の書き換えを探しています。したがって、次の URL はすべて https://www.domain.tld/some/path に書き換える必要があります

ドメイン名がルールに含まれないように、これは一般的なソリューションである必要があります。ほとんどの場合、ルールには%{HTTP_HOST}%{REQUEST_URI}またはのようなものが含まれます%1/$1。どちらか一方を使用する理由を説明してください。

これに似た質問はたくさんありますが、https と www リダイレクトの両方を組み合わせた解決策は見つかりませんでした。お役に立てれば幸いです。

編集1:

@anubhava による解決策を試しましたが、「リダイレクトが多すぎます」というエラーが表示されます。サイトはMagentoのサイトなので、htaccessの方が少し難しいです。以下は、私が試した 2 つの mod_rewrite セクションです。

<IfModule mod_rewrite.c>

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

    Options +FollowSymLinks
    RewriteEngine on

    RewriteCond %{HTTP_HOST} !^www\. [NC]
    RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

    RewriteCond %{HTTPS} off
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

############################################
## you can put here your magento root folder
## path relative to web root

    #RewriteBase /magento/

############################################
## uncomment next line to enable light API calls processing

#    RewriteRule ^api/([a-z][0-9a-z_]+)/?$ api.php?type=$1 [QSA,L]

############################################
## rewrite API2 calls to api.php (by now it is REST only)

    RewriteRule ^api/rest api.php?type=rest [QSA,L]

############################################
## workaround for HTTP authorization
## in CGI environment

    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

############################################
## TRACE and TRACK HTTP methods disabled to prevent XSS attacks

    RewriteCond %{REQUEST_METHOD} ^TRAC[EK]
    RewriteRule .* - [L,R=405]

############################################
## redirect for mobile user agents

    #RewriteCond %{REQUEST_URI} !^/mobiledirectoryhere/.*$
    #RewriteCond %{HTTP_USER_AGENT} "android|blackberry|ipad|iphone|ipod|iemobile|opera mobile|palmos|webos|googlebot-mobile" [NC]
    #RewriteRule ^(.*)$ /mobiledirectoryhere/ [L,R=302]

############################################
## always send 404 on missing files in these folders

    RewriteCond %{REQUEST_URI} !^/(media|skin|js)/

############################################
## never rewrite for existing files, directories and links

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-l

############################################
## rewrite everything else to index.php

    RewriteRule .* index.php [L]

</IfModule>

そして2番目のバージョン:

<IfModule mod_rewrite.c>

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

    Options +FollowSymLinks
    RewriteEngine on

    RewriteCond %{HTTPS} off [OR]
    RewriteCond %{HTTP_HOST} !^www\.
    RewriteRule ^ https://www.domain.tld%{REQUEST_URI} [R=301,L]

############################################
## you can put here your magento root folder
## path relative to web root

    #RewriteBase /magento/

############################################
## uncomment next line to enable light API calls processing

#    RewriteRule ^api/([a-z][0-9a-z_]+)/?$ api.php?type=$1 [QSA,L]

############################################
## rewrite API2 calls to api.php (by now it is REST only)

    RewriteRule ^api/rest api.php?type=rest [QSA,L]

############################################
## workaround for HTTP authorization
## in CGI environment

    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

############################################
## TRACE and TRACK HTTP methods disabled to prevent XSS attacks

    RewriteCond %{REQUEST_METHOD} ^TRAC[EK]
    RewriteRule .* - [L,R=405]

############################################
## redirect for mobile user agents

    #RewriteCond %{REQUEST_URI} !^/mobiledirectoryhere/.*$
    #RewriteCond %{HTTP_USER_AGENT} "android|blackberry|ipad|iphone|ipod|iemobile|opera mobile|palmos|webos|googlebot-mobile" [NC]
    #RewriteRule ^(.*)$ /mobiledirectoryhere/ [L,R=302]

############################################
## always send 404 on missing files in these folders

    RewriteCond %{REQUEST_URI} !^/(media|skin|js)/

############################################
## never rewrite for existing files, directories and links

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-l

############################################
## rewrite everything else to index.php

    RewriteRule .* index.php [L]

</IfModule>

何か案は?

編集2:

@anubhava によって提案されているように、安全なベース URL と安全でないベース URL に https を使用するように Magento を設定するだけでは、問題は解決しません。URL http://www.domain.tld/some/pathは、 https://www.domain.tld/some/pathではなくhttps ://www.domain.tldにリダイレクトされます。

4

2 に答える 2

1

これを試すことができます:

<IfModule mod_rewrite.c>
    RewriteEngine On

    # non www to https://www...
    RewriteCond %{HTTP_HOST} !^www\.
    RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]

    # non https to http
    RewriteCond %{HTTPS} off
    RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
</IfModule>

最初の書き換えルールは、ホスト名が www で始まるかどうかをチェックし、そうでない場合は、https を使用してリダイレクトし、ホスト名の先頭に www を追加します。フラグ R=301 は、HTTP 301 パーマネント リダイレクトを使用するように apache に通知し、L は mod_rewrite がルール セットの処理を停止するようにします。詳細については、ドキュメントをご覧ください: http://httpd.apache.org/docs/current/rewrite/

2 番目の書き換えルールは、www を含むが https:// を含まない要求をキャッチします。ホスト名とパスは変更されません。2 番目のルールを指摘してくれた、 http: //joseph.randomnetworks.com/2004/07/22/redirect-to-ssl-using-apaches-htaccess/ の Nicolás Echániz と Joseph Scott のブログに感謝します。

于 2013-04-02T21:39:05.160 に答える