人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

wordpress2.3.1で、http://hoge.jp/2008/07/07_001.phpのようなURL(ディレクトリ)を生成しながらブログを書いていたのですが、とある事情から、
http://hoge.jp/wordpress/2008/07/07_001.phpのように、階層を一個さげたところ、全て画像のリンク切れになって表示されなくなってしまいました。(当たりませなんですが)
階層を変えても、画像のリンクをそのままにする方法ってないものでしょうか?

●質問者: righton
●カテゴリ:インターネット ウェブ制作
✍キーワード:URL いもの とある ディレクトリ リンク
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● youku555
●32ポイント

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

◎質問者からの返答

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


2 ● tobeoscontinue
●32ポイント

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などもあるなら更に処理する必要があります。

◎質問者からの返答

すごい。。。

ありがとうございます!


3 ● dfo
●16ポイント

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ