wordpress2.3.1で、http://hoge.jp/2008/07/07_001.phpのようなURL(ディレクトリ)を生成しながらブログを書いていたのですが、とある事情から、

http://hoge.jp/wordpress/2008/07/07_001.phpのように、階層を一個さげたところ、全て画像のリンク切れになって表示されなくなってしまいました。(当たりませなんですが)
階層を変えても、画像のリンクをそのままにする方法ってないものでしょうか?

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2008/08/30 19:45:02
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答3件)

id:youku555 No.1

回答回数81ベストアンサー獲得回数0

ポイント32pt

画像のリンクを書き換えるか、画像のディレクトリを変更するしかないですね。

id:righton

ですよね。ありがとうございます。

2008/08/26 05:39:27
id:tobeoscontinue No.2

回答回数220ベストアンサー獲得回数59

ポイント32pt

wordpress-2.5-jで確認したところ投稿内容の中に画像のアドレスが埋め込んであったのでwordpress自体での解決はできないのではないかと思います。

自力で解決する方法として

1.lnを使うかcpするのが一番簡単なように思います。
2.投稿内容はwp_postsテーブルのpost_contentに書き込まれているのでこれを直接変更する。
<?php
define ('USER_ID', '');
define ('PASS_WORD', '');
define ('DB_NAME', '');

$link = mysql_connect('localhost', USER_ID, PASS_WORD);
if ($link) {
  mysql_select_db(DB_NAME);
  $result = mysql_query("SELECT ID, post_content FROM wp_posts");
  while ($row = mysql_fetch_assoc($result)) {
    $rep_content = preg_split("/hoge\.jp\/2008/", $row['post_content']);
    if (1 < count($rep_content)) {
      $row['post_content'] = implode("hoge.jp/wordpress/2008", $rep_content);
      $sql_update = "UPDATE wp_posts SET ".
                    "post_content = '".$row['post_content']."' ".
                    "WHERE ID =".$row['ID'];
      echo "mysql_query($sql_update)";
  } }
  mysql_free_result($result);
  mysql_close($link);
}
?>

wp_postsテーブルのpost_contentを順に読み込んでhoge.jp/2008があったらhoge.jp/wordpress/2008にして更新(ここでは表示だけ)します。

データを壊すかもしれませんのでする場合はまずコピーしたもので正しく動作するか確認してからにして下さい。

3.Rewriteを使う
RewriteEngine OFF
RewriteCond %{REQUEST_URI} !^/wordpress [NC]
RewriteCond %{REQUEST_URI} \.(gif|png|jpe?g)$ [NC]
RewriteRule ^(.*)$ /wordpress/$1 [L]

%{REQUEST_FILENAME}が使えるかと思ったのですが自分の環境の問題なのかうまくいかなかったので%{REQUEST_URI}を使っています。

REQUEST_URIが/wordpressで始まっておらず、画像ファイルへのアクセスなら先頭に/wordpressを付加するというものです。

ただ使用環境によってはこれだけの判断基準ではまずいかもしれません。

4.ErrorDocumentを使う

.htaccessに

ErrorDocument 404 /wordpress/wp-directory-map.php

のようにしてphpで処理するようにします。

header("Location: http://hoge.jp/wordpress".$_SERVER['REQUEST_URI']);

のようにリダイレクトしてもいいのですが相手によっては不快に思う人がいるかもしれませんので

GDをなどを使ってファイル自体を送出した方がいいかもしれません。

$img = imagecreatefromgif('..'.$_SERVER['REQUEST_URI']);
if ($img) {
  header("Content-Type: image/gif");
  imagegif($img);
  imagedestroy($img);
}

ファイルパスの..はErrorDocumentで指定したファイルと画像ファイルとの位置関係で変わります。

ルートから指定した方が間違いがないかと。

画像がpng,jpegなどもあるなら更に処理する必要があります。

id:righton

すごい。。。

ありがとうございます!

2008/08/27 16:34:16
id:dfo No.3

回答回数37ベストアンサー獲得回数2

ポイント16pt

元の画像ファイルの場所にシンボリックリンクを張ればいいのでは?

http://e-words.jp/w/E382B7E383B3E3839CE383AAE38383E382AFE383AAE3...

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません