【WordPress】htaccessで長い画像URLを短く変更する方法

更新日:2023/04/18

WordPressの画像URLは少し長いと感じている人も多いと思います。
そこで画像をURLを変更したいのですが、画像のアップロード先を変更するというものがほとんどです。
この方法は既存の画像ファイルをアップロード先に移動する必要があって、手間がかかります。
またキャッシュなどの影響で、画像が表示されないなどのトラブルがおこります。

そこで考えたのが.htaccessを変更して、画像URLを短くする方法です。
今回は、その方法をお伝えします。

 

画像URLを変更するコード

今回は、WordPressの画像URLを、次のように変更します。

変更前:https://ドメイン名/wp-content/uploads/画像ファイル名
変更後:https://ドメイン名/img/画像ファイル名

変更する.htaccessファイルは、WordPressがインストールされているディレクトにあります。
念のため、変更前に名前を変えてコピーしておくといいですね。

記述するのは、次のコードです。

画像URLを変更するコード

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteBase /
    RewriteRule ^img/(.*)$ /wp-content/uploads/$1 [L]
</IfModule>

WordPressをサブディレクトリにインストールしている場合は、RewriteBaseを変更してください。

例:URLがhttp://ドメイン名/wp/の場合

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteBase /wp
    RewriteRule ^img/(.*)$ /wp-content/uploads/$1 [L]
</IfModule>

.htaccessは、環境により内容が変化しますが、次のようなコードが記述されています。
プラグイン等を入れていると、この他にも記述されていると思います。
ほとんどのケースでは、上記のコードは# BEGIN WordPressの直前に記述すれば大丈夫です。

次のコードより前に記述する

# BEGIN WordPress
# "BEGIN WordPress" から "END WordPress" までのディレクティブ (行) は
# 動的に生成され、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

 

テスト

ブラウザのURL欄に、変更後の画像URLを入力します。
画像が表示されれば、設定できています。

なお、以前の長いURLも使用できます。
そのため、既存の投稿はそのままでも大丈夫です。

 

簡単な解説

コードの内容を、行ごとに簡単に解説しておきます。

■1行目:<IfModule mod_rewrite.c>

Webサーバーにリライト機能がインストールされているか確認しています。
インストールされていない場合は、</IfModule>までの内容が無視されます。

■2行目:RewriteEngine on

リライト機能を有効にします。

■3行目:RewriteBase /

転送先の基準となるパスをセットします。

■4行目:RewriteRule ^img/(.*)$ wp-content/uploads/$1 [L]

URLが条件に一致する場合、転送を行います。

一致条件は、次の部分です。

^img/(.*)$

これは、ドメインより後ろ(/ を含む)が、img/で始まると一致します。
(.*)$は、img/の後から、URLの最後までに一致します。

転送先は、次の部分です。

wp-content/uploads/$1

$1は、一致条件の(.*)$部分に置き換えられます。
そしてwp-contentの前にRewriteBaseの値が連結されます。

例1:RewriteBase /の場合

http://ドメイン名/img/image.jpg
 ↓ 転送
http://ドメイン名/wp-content/uploads/image.jpg

例2:RewriteBase /wpの場合

http://ドメイン名/wp/img/image.jpg
 ↓ 転送
http://ドメイン名/wp/wp-content/uploads/image.jpg

最後の [L] は転送フラグで、以降の処理をおこなわないという意味です。
なくても動作しますが、追記などしたときのために記述してあります。

なお [R=301,L]とするとリダイレクトされて、URLが変わります。
[L]のみの場合はリライトです。URLが変わりません。

 

メディアのURLを変更する

投稿画面に画像を挿入する場合、『メディアを追加』画面を使用することが多いです。
しかし挿入されるのは変更前のURLなので、手作業で変更後のURLに書き換える必要があります。

面倒なので、メディアで挿入されるURLも変更しましょう。

次のコードをfunction.phpまたは自作プラグインに記述します。

add_filter('get_image_tag',function($html){
    $search = 'src="'.home_url().'/wp-content/uploads/';
    $replace = 'src="'.home_url().'/img/';
    return str_replace($search,$replace,$html);
});

上のコードは、投稿に挿入するタグを変更しています。

『メディアを追加』画面のファイルURLは影響を受けないので、変更前のものが表示されます。
投稿に挿入ボタンを押すと、変更後のタグが挿入されます。

WordPressはHTMやCSSの知識も必要。総合的な知識を身につけよう。

更新日:2023/04/18

書いた人(管理人):けーちゃん

スポンサーリンク

記事の内容について

null

こんにちはけーちゃんです。
説明するのって難しいですね。

「なんか言ってることおかしくない?」
たぶん、こんなご意見あると思います。

裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。
そんなときは、ご意見もらえたら嬉しいです。

掲載コードについては事前に動作確認をしていますが、貼り付け後に体裁を整えるなどをした結果動作しないものになっていることがあります。
生暖かい視線でスルーするか、ご指摘ください。

ご意見、ご指摘はこちら。
https://note.affi-sapo-sv.com/info.php

 

このサイトは、リンクフリーです。大歓迎です。