• About
  • Contact

色々なことを徒然と……

Kaede Blog

  • About
  • Contact
  1. HOME >
  2. 技術・開発 >

技術・開発

【Apache】サーバー移行で画像が消えた!? バーチャルホスト単位で文字コード(EUC-JP)を指定して直す方法

2012年10月11日 2026年2月22日

新しいサーバーへWebサイト(今回はMHF Wiki)を移行した際、「テキストは表示されるのに、画像だけがずっと非表示(リンク切れ)になる」というトラブルに遭遇しました。

画像のURLを直接ブラウザで叩いてみると、「ファイルが見つかりません(404 Not Found)」というエラーが…。
FTPソフトでサーバーの中身を確認すると、画像ファイル自体は間違いなくアップロードされています。

原因:URLパスのエンコード不一致(UTF-8 vs EUC-JP)

原因を調べていくと、「文字コード(エンコード)」の違いであることが判明しました。

古いWikiシステム等では、日本語を含む画像ファイル名やURLパスが「EUC-JP」で処理されていることがよくあります。
しかし、最近の新しいサーバー(OSやApache)は標準の文字コードが「UTF-8」になっているため、EUC-JPで飛んできたリクエストを正しく解釈できず、「そんな名前のファイルはない」とエラーを返してしまっていたのです。

解決策:VirtualHostで個別に文字コードを指定する

この問題を解決するには、サーバー(Apache)側に「このサイトはEUC-JPで処理してね」と教えてあげる必要があります。

.htaccess に記述して制御する方法もありますが、今回はサーバー全体の php.ini や他のドメインに影響を与えないよう、Apacheのバーチャルホスト(VirtualHost)設定に直接記述して修正することにしました。

Apacheの設定コード(httpd.conf / vhost.conf)

該当するドメインの <VirtualHost> ディレクティブ内に、以下の記述を追加します。

<VirtualHost *:80>
    ServerAdmin webmaster@example.com
    DocumentRoot /var/www/html/mhfwiki
    ServerName wiki.example.com

    # Apache自体のデフォルト文字コードをEUC-JPに設定
    AddDefaultCharset euc-jp

    # PHPがモジュールとして動いている場合、このドメイン内だけPHPの文字コード設定を上書きする
    <IfModule mod_php5.c>
        php_flag  output_buffering        Off
        php_value output_handler          none
        php_value default_charset         EUC-JP
        php_value mbstring.language       Japanese
        php_flag  mbstring.encoding_translation On
        php_value mbstring.http_input     auto
        php_value mbstring.http_output    EUC-JP
        php_value mbstring.internal_encoding    EUC-JP
        php_value mbstring.substitute_character none
    </IfModule>
</VirtualHost>

設定のポイント

  • AddDefaultCharset euc-jp:Apacheがブラウザに返すHTTPヘッダーの文字コードをEUC-JPにします。
  • <IfModule mod_php5.c> 内の記述:PHPスクリプト内で処理される文字コード(内部エンコーディングやHTTP出力)を強制的にEUC-JPに合わせます。これにより、PHP側で生成されるURLやファイルパスも正しくEUC-JPとして扱われます。

設定ファイルを保存後、Apacheを再起動(またはリロード)して設定を反映させます。

# CentOS / RHEL系の場合
service httpd reload

# Debian / Ubuntu系の場合
service apache2 reload

結果:画像が無事に表示されました!

設定反映後、再度Wikiにアクセスしてみると……

無事に画像が表示されるようになりました!

古いシステムを新しいサーバーへ移行する際は、データベースやファイルの移行だけでなく「文字コードの互換性」にも気をつける必要がありますね。同じような症状でお悩みの方の参考になれば幸いです。

  • Post
  • Share
  • Hatena
  • Pinterest
  • LINE
  • note
  • コメント
  • URLコピー

-技術・開発
-apache, EUC-JP, php, VirtualHost, サーバー移行, トラブルシューティング, 文字コード, 文字化け

author


comment コメントをキャンセル

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です


reCaptcha の認証期間が終了しました。ページを再読み込みしてください。

関連記事

WSL2(Windows Subsystem for Linux 2)インストール&設定

Windows10から公式ツールのみでインストールできるようになったWSL(Windows Subsystem for Linux)バージョン 1903 以降、ビルド 18362からWSL2のインスト ...

負の数(マイナス)で少数点を扱う場合、floorやceilは注意しよう

ceil・floor・roundの動作 JavaScriptで数値を切り上げ、切り捨て、四捨五入の処理を行う場合 小数点切り上げMath.ceil小数点切り捨てMath.floor小数点四捨五入Mat ...

【WordPress】Jetpackがすぐに切断される?Nginx環境で接続エラーを解決する2つの設定方法

最近、jetpackでの接続がすぐに切断され、twitter連携などができなくなっていた。 そのため、原因調査・対策しましたのでメモ wp-xmlrpc.phpに接続できない⇒IPが変わっていた wp …

no image
【Java】log4jdbcで「setStringは32766文字未満…」エラー!CLOB登録時のAbstractMethodError回避策

センター試験の日ですね。受験生の方は実力発揮できるようにがんばってください。 おはようございます。渉猟です。 仕事でJAVAバッチ製作で、SQLログ吐き出しができるようにlog4jdbcを使っています …

【Windows11】コマンド1発!WSL(Windows Subsystem for Linux)の簡単なインストール方法

Windows11でWSL(Windows Subsystem for Linux)をインストールするにはWindows10よりも簡単にできるとのことなので実際に試してみました。 Windows10で …

【Postfix】ClamAVと連携してメールのウイルスチェックを行う方法(clamav-milter)

【注意喚起】「久しぶり!」で始まる間違いメールにご用心?巧妙化するスパムの手口

Wi-Fi8(IEEE802.11bn)とは?Wi-Fi7との違いや次世代の「超・高信頼性」を解説

2026/4/18

Wi-Fi7(IEEE802.11be)とは?従来規格との違いや新機能を解説

2026/4/18

大阪・関西万博2025 閉幕後備忘録

2025/11/17

Hardening 2024 Convolutions

2025/5/10

【車 住所変更 ③】運輸支局手続きとその他手続き

2025/5/11

  • no imageレビュー・その他
  • no image写真・旅行
  • no image技術・開発
  • no image未分類

色々なことを徒然と……

Kaede Blog

© 2026 Kaede Blog