ユーザーまたはボットがHTTPSおよび末尾のスラッシュなしでURLにアクセスしようとすると、私のWordPressパワードサイトの1つで二重リダイレクトが発生することに気付きました。
要するに:
http://example.com/contact-us
はhttps://www.example.com/contact-us
にリダイレクトしますhttps://www.example.com/contact-us
はhttps://www.example.com/contact-us/
にリダイレクトします私のhtaccessファイルは次のようになります:
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
これらの二重リダイレクトの発生を防ぐために何を変更する必要がありますか?
スタックオーバーフローのanubhava によって提供されるスニペットを使用して、これを機能させることができました。誰かがこのコードで潜在的な問題を見つけた場合、またはより良いよりクリーンなリダイレクトをお持ちの場合は、答えとしてコードをlonすることをheしないでください。
RewriteEngine On RewriteBase / RewriteCond %{HTTP_Host} ^domain\.com$ [OR] RewriteCond %{HTTPS} off RewriteRule ^/?$ https://www.domain.com [R=301,L] RewriteCond %{HTTP_Host} ^domain\.com$ [OR] RewriteCond %{HTTPS} off [OR] RewriteCond %{REQUEST_URI} !(/$|\.) RewriteRule ^(.+?)/?$ https://www.domain.com/$1/ [R=301,L]
だから私の.htaccessファイルは次のようになりました:
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_Host} ^example\.com$ [OR]
RewriteCond %{HTTPS} off
RewriteRule ^/?$ https://www.example.com/ [R=301,L]
RewriteCond %{HTTP_Host} ^example\.com$ [OR]
RewriteCond %{HTTPS} off [OR]
RewriteCond %{REQUEST_URI} !(/$|\.)
RewriteRule ^(.+?)/?$ https://www.example.com/$1/ [R=301,L]
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>