解決したい問題
さくらのレンタルサーバ上で、WordPressを使ってサイトを構築しました。
設定(一般設定)は次の通りです。
WordPressアドレス:
https://www.example.com/yyy
サイトアドレス:
https://example.com
【2018/2/6 AM2:10頃訂正 上記のサイトアドレスが https://www.example.com となっていましたが、正しくは https://example.com でした】
先方からの要望で、wwwつきのURLを指定した場合は、wwwなしのURLにリダイレクトするようにしています(.htaccessの内容は後述します)。例えば、
https://www.example.com/hoge
と指定した場合は
https://example.com/hoge
となるようにしています。
Webサイトの表示やリンクは正常で、画像も表示自体は正常です。
しかし、例えば、
https://www.example.com/yyy/wp-content/themes/zzz/image/hoge.png
というURLにある画像に対して、<img>のsrc属性に、wwwを抜いた
https://example.com/yyy/wp-content/themes/zzz/image/hoge.png
というURLを指定すると、画像が表示されません。
試しに、wwwなしのURLをブラウザで直接指定すると、画像が表示されないかわりに、トップページ(index.php)にリダイレクトされてしまいました。
先方から、wwwなしのURLでも画像が表示されるようにしたいと言われています。どのようにすればよろしいでしょうか。
.htaccessの内容
まず、ルートディレクトリ
https://www.example.com
にある .htaccessは次の通りです。
RewriteEngine On RewriteCond %{HTTP_HOST} ^www.example.com$ RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]
次に、WordPressアドレスである
https://www.example.com/yyy
の .htaccessは次の通りです。
RewriteEngine On RewriteCond %{HTTPS} off RewriteCond %{HTTP:X-Sakura-Forwarded-For} ^$ RewriteRule ^(.*)$ https://example.com/$1 [R=301,L] # BEGIN SAKURA Internet Inc. <IfModule mod_deflate.c> SetOutputFilter DEFLATE AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE application/x-javascript application/javascript application/ecmascript </IfModule> <IfModule mod_expires.c> ExpiresActive On <FilesMatch ".(css|js)$"> ExpiresDefault "access plus 1 week" </FilesMatch> <FilesMatch ".(gif|jpe?g|png)$"> ExpiresDefault "access plus 1 month" </FilesMatch> </IfModule> # END SAKURA Internet Inc. # BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress
試したこと
<img>のsrc属性で、wwwなしのURLである
https://example.com/yyy/wp-content/themes/zzz/image/hoge.png
を指定した場合は、wwwつきのURLである
https://www.example.com/yyy/wp-content/themes/zzz/image/hoge.png
にリダイレクトすれば良いのではないかと考えました。
そこで、
https://www.example.com/yyy
にある .htaccessの記述の冒頭を次のようにしましたが、結果は変化なしでした。
RewriteEngine On RewriteCond %{HTTPS} off RewriteCond %{HTTP:X-Sakura-Forwarded-For} ^$ RewriteRule ^(.*)$ https://example.com/$1 [R=301,L] # 次の2行を追加 RewriteCond %{REQUEST_URI} ^https://example.com/yyy/wp-content/themes/zzz/image/hoge.png$ RewriteRule . https://www.example.com/yyy/wp-content/themes/zzz/image/hoge.png [L] # BEGIN SAKURA Internet Inc. (これ以降は先ほどの .htaccess と同じです)
なお、全ての画像ファイルではなく、特定の1つの画像ファイル(hoge.png)にした理由は、とりあえず問題自体が解決するかどうか知りたかったからです。
補足情報
WordPressのバージョン: 4.9.2
Webサイト全体にSSLを使っています
2018/2/6 AM 11:25頃追記
上記の文中にあるyyyについて補足いたします。
yyyの部分の、実際の文字列は、ドメイン(example.com)のexampleの部分と全く同じ文字列が入ります。
example.com自体は例示としてのドメインで、実際にはexampleではなく会社名を表すアルファベットが入ります。そして、その会社名は、ドメイン名の後に続くサブディレクトリ名としても使われています。
例えば、WordPressアドレスとして
https://www.example.com/yyy
と書きましたが、実際のアドレスは(ドメイン部分は例示のためexample.comとしていますが)
https://www.example.com/example
となっています。
2018/2/7 AM 2:50頃追記
質問投稿前から行っていたことで書き漏らしていましたが、さくらではhttpsからhttpにリダイレクトされる問題があるとのことでした。
参考にしたWebサイト: https://qiita.com/tabimoba/items/64ef60412abe7ad6f0ac
そのため、上記のWebサイトの記述にならい、 https://www.example.com/example/wp-config.php に、次の記述を追加しています。
PHP
1if( isset($_SERVER['HTTP_X_SAKURA_FORWARDED_FOR']) ) { 2 $_SERVER['HTTPS'] = 'on'; 3 $_ENV['HTTPS'] = 'on'; 4 $_SERVER['HTTP_HOST'] = 'example.com'; 5 $_SERVER['SERVER_NAME'] = 'example.com'; 6 $_ENV['HTTP_HOST'] = 'example.com'; 7 $_ENV['SERVER_NAME'] = 'example.com'; 8}
回答2件
あなたの回答
tips
プレビュー