リダイレクトエラーが多発する原因として考えられるのは、リダイレクトルールの競合やループです。特に以下のポイントに注目して確認する必要があります:
1. 複数のRewriteEngine On
複数のRewriteEngine On
ディレクティブが使用されていますが、これは問題にはなりません。ただし、リダイレクトルールが複数あることでルールが競合している可能性があります。
2. リダイレクトループの可能性
異なるリダイレクトルールが相互に影響し合って、無限ループを引き起こしている可能性があります。以下の部分を特に注意して確認してください:
スマホリダイレクトルール
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} (iPhone|Android.*Mobile|Windows.*Phone) [NC]
RewriteCond %{QUERY_STRING} !mode=pc
RewriteRule ^$ /sp/ [R,L]
</IfModule>
HTTPS強制リダイレクトルール
<IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L] </IfModule>
WordPressルール
<IfModule mod_rewrite.c> RewriteEngine On RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule>
これらのルールが組み合わさることで、リダイレクトループが発生している可能性があります。
3. スマホリダイレクトとHTTPS強制リダイレクトの競合
スマホ向けにリダイレクトするルールとHTTPS強制リダイレクトのルールが同時に適用され、ループが発生する可能性があります。例えば、スマホからのアクセスが/sp/
にリダイレクトされ、その後HTTPSへのリダイレクトが発生し、再びスマホリダイレクトが適用されるといった状況です。
修正提案
スマホリダイレクトのルールとHTTPS強制リダイレクトのルールの順序を変更し、スマホリダイレクトのルールをHTTPS強制リダイレクトの後に配置することで、競合を避けることができます。
#Begin Really Simple Security
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
</IfModule>
#End Really Simple Security
# スマホリダイレクトルール
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} (iPhone|Android.*Mobile|Windows.*Phone) [NC]
RewriteCond %{QUERY_STRING} !mode=pc
RewriteRule ^$ /sp/ [R,L]
</IfModule>
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
# BEGIN EWWWIO
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_ACCEPT} image/webp
RewriteCond %{REQUEST_FILENAME} (.*)\.(jpe?g|png|gif)$
RewriteCond %{REQUEST_FILENAME}.webp -f
RewriteCond %{QUERY_STRING} !type=original
RewriteRule (.+)\.(jpe?g|png|gif)$ %{REQUEST_URI}.webp [T=image/webp,L]
</IfModule>
<IfModule mod_headers.c>
<FilesMatch "\.(jpe?g|png|gif)$">
Header append Vary Accept
</FilesMatch>
</IfModule>
AddType image/webp .webp
# END EWWWIO
# BEGIN LiteSpeed
<IfModule Litespeed>
SetEnv noabort 1
</IfModule>
# END LiteSpeed
注意点
- 各リダイレクトルールが意図通りに動作するか、テスト環境で確認してください。
- 特にスマホリダイレクトとHTTPS強制リダイレクトの動作が重ならないように注意してください。
- WordPressの設定がリダイレクトに影響を与えないかも確認が必要です。
この修正により、リダイレクトエラーやループの発生が解消される可能性が高くなります。
LEAVE A REPLY