seo301redirectプラグインについて

質問全般・改善要望
返信する
yamatan
メンバー
メンバー
記事: 6
登録日時: 2013年6月13日(木) 20:46

seo301redirectプラグインについて

投稿記事 by yamatan »

-----
ご利用のサーバ:xserver
MODXのバージョン:modx-1.0.10J
PHPのバージョン:5.3.3
MySQLのバージョン:5.0.95
ブラウザ:Chrome 27.0.1453.110 (Mac)
-----

2ヶ月前から、MODxを使ってサイト作りを始めたばかりです。
以前はWiki系の別のCMSを使っていたのですが、
MODxの自由な手作り感が気に入って乗り換えました。
未だ使い始めたばかりですが、MODxはとてもすばらしいですね。
見つけることができてとてもうれしいです。

乗り換えの際に、以前のサイトでの被リンクを受け継ぎたいので
301リダイレクトの設定を調べてあれこれ試していたのですが、
フレンドリーURLを使用していることと、.htaccess の記述が良く解らず、
このフォーラムで見つけた seo301redirect プラグインを使用してみましたが
うまくいきませんでした。


元のURL

コード: 全て選択

http://mysite123.com/index.php?catalogue
上記URLを

コード: 全て選択

http://mysite123.com/catalogue
このURLへ301リダイレクトしたいのですが、

seo301redirectの記述で

$pages['http://mysite123.com/index.php?catalogue'] = 8;
(ドキュメントID=8のエイリアスは/catalogue)

としてもホームページが表示されます。
何かよい方法があれば教えていただけるとうれしいです。
何卒よろしくおねがいいたします。
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

Re: seo301redirectプラグインについて

投稿記事 by yama »

コード: 全て選択

//<?php
/**
 * seo301redirect
 * 
 * Redirects old URL's to the new ones
 *
 * @category    plugin
 * @version     0.0.3
 * @license     http://www.gnu.org/copyleft/gpl.html GNU Public License (GPL)
 * @internal    @events OnPageNotFound
 * @internal    @modx_category Navigation
 * @author      Stefan Bruggmann - http://www.ng-projects.ch / Apr 10, 2008 13:12 CET
 * @author      Yama - http://kyms.jp / 2013/06/13
 */

/* /dir/page.html = new doc ID; */
$urls = <<< EOL

/old1.html = 5
/old2.html = 10
/old3.html = 15

EOL;

$urls = trim($urls);
$urls = explode("\n", $urls);

if(empty($urls)) return;

foreach($urls as $url)
{
    $url = trim($url);
    if(empty($url)) continue;
	list($url,$id) = explode('=', $url, 2);
	$url = trim($url);
	$id  = trim($id);
	$id  = intval($id);
	$pages[$url] = $id;
}

foreach($pages as $url => $id)
{
	$url = str_replace(MODX_SITE_URL, '', $url);
	$url = '/' . ltrim($url, '/');
	if($_SERVER['REQUEST_URI'] == $url)
	{
		$url = $modx->makeUrl($id, '', '', 'full');
		$modx->sendRedirect($url, 0, 'REDIRECT_HEADER', 'HTTP/1.1 301 Moved Permanently');
		exit;
	}
}
上記のコードを試してみていただけますでしょうか
yamatan
メンバー
メンバー
記事: 6
登録日時: 2013年6月13日(木) 20:46

Re: seo301redirectプラグインについて

投稿記事 by yamatan »

yama様
早速のレスありがとうございます。

頂いた内容にプラグインを書き換えてみて

コード: 全て選択

/index.php?catalogue = 8
指定を上記に変更したのですが、症状は変わりませんでした。


フレンドリーURLをONにしてTopicPathで表示されるパン屑リストにも問題が出ています。

「カタログ」リソース に表示されるパン屑リスト
トップ » 作品例 » カタログ
この 「カタログ」リソース からパン屑リストの 「作品例(エイリアス=works , ID=4」のリンクをクリックすると

コード: 全て選択

http://works/
へアクセスしてしまい、エラーとなります。
フレンドリーURLをOFFにした場合は
/index.php?id=4に問題なくリンクされています。

URL周辺以外は現状問題なく使えていますのですが
クリーンインストールも考えてみた方がよいのでしょうか?

ご面倒をおかけいたしますが、ご教授いただけるとたすかります。
何卒よろしくお願いいたします。
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

Re: seo301redirectプラグインについて

投稿記事 by yama »

TopicPathが出力するソースはhttpを含まないはずなので、URLを生成する関数の動作がおかしい気がします。
(seo301redirectもTopicPathも同じ関数を使います)
他にインストールしているプラグインはありますでしょうか?

https://github.com/modxcms-jp/evolution ... stable.zip
上記の最新ベータ版でアップデートすると改善されるでしょうか?

http://modx.jp/docs/update.html
アップデート方法
yamatan
メンバー
メンバー
記事: 6
登録日時: 2013年6月13日(木) 20:46

Re: seo301redirectプラグインについて

投稿記事 by yamatan »

yama様
速レスありがとうございます。

サイトはバージョン:modx-1.0.10J を新規インストールして作成しました
プラグインでデフォルトから追加した物は seo301redirect のみです。

すみません。先程記載した

コード: 全て選択

http://works/
は、works/ の間違いでした。
不正確な情報をお伝えして申し訳ありません。

TopicPathで表示されるパン屑リストについては
URLをよく見ると
/works//catalogue.html
となっていましたのでフレンドリーURLのプレフィックスの指定に
デフォルトで入っていた/を削除してみたら、現状問題なく動いているように見えます。

ですが、親リソースを0に指定したリソースについては、
サフィックスにデフォルトで入っている .html は反映されず、どれも/がURLの末尾についています。
それ以外のリソースにはURLの末尾に .html が追加されています。
これは、フレンドリーURLの設定でエイリアスパスを使用しない指定にしても同じでした。

頂いたベータ版は「より慎重に対応するには」の手順に従って
アップデートしてみましたが、301リダイレクトについては変化なしでした。
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

Re: seo301redirectプラグインについて

投稿記事 by yama »

http://www.xserver.ne.jp/
サーバはこちらで合ってますでしょうか?試用できるようなので試してみます
yamatan
メンバー
メンバー
記事: 6
登録日時: 2013年6月13日(木) 20:46

Re: seo301redirectプラグインについて

投稿記事 by yamatan »

yama様

サーバーは間違いありません。
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

Re: seo301redirectプラグインについて

投稿記事 by yama »

プランがx10・x20・x30の3つから選べるようですが、どれでしょうか?
yamatan
メンバー
メンバー
記事: 6
登録日時: 2013年6月13日(木) 20:46

Re: seo301redirectプラグインについて

投稿記事 by yamatan »

X20を使っています。
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

Re: seo301redirectプラグインについて

投稿記事 by yama »

試用を申し込んでみましたので確認します。修正コードができたらテストをお願いしてよいでしょうか?(ファイルをひとつ上書きするだけです)
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

Re: seo301redirectプラグインについて

投稿記事 by yama »

調べてみました。
seo301redirect自体が404ページに対して動作するプラグインなので、/index.php?catalogueというURIの場合は「index.php」をトップページと見て実際に存在するページと判定しますので、動作対象外になると思います。これは仕様の問題でもありますが、この仕様でないと、GETでパラメータを与えるだけで404扱いになるため仕方がなさそうです。

コード: 全て選択

//<?php
/**
 * seo301redirect
 * 
 * Redirects old URL's to the new ones
 *
 * @category    plugin
 * @version     0.0.3
 * @license     http://www.gnu.org/copyleft/gpl.html GNU Public License (GPL)
 * @internal    @events OnPageNotFound,OnWebPageInit
 * @internal    @modx_category Navigation
 * @author      Stefan Bruggmann - http://www.ng-projects.ch / Apr 10, 2008 13:12 CET
 * @author      Yama - http://kyms.jp / 2013/06/13
 */

/* /dir/page.html = new doc ID; */
$urls = <<< EOL

/old1.html = 5
/old2.html = 10
/old3.html = 15

EOL;

if($modx->event->name==='OnWebPageInit')
{
	if(strpos($_SERVER['REQUEST_URI'],'/index.php?'===false)) return;
}

$urls = trim($urls);
$urls = explode("\n", $urls);

if(empty($urls)) return;

foreach($urls as $url)
{
    $url = trim($url);
    if(empty($url)) continue;
	list($url,$id) = explode('=', $url, 2);
	$url = trim($url);
	$id  = trim($id);
	$id  = intval($id);
	$pages[$url] = $id;
}

foreach($pages as $url => $id)
{
	$url = str_replace(MODX_SITE_URL, '', $url);
	$url = '/' . ltrim($url, '/');
	if($_SERVER['REQUEST_URI'] == $url)
	{
		$url = $modx->makeUrl($id, '', '', 'full');
		$modx->sendRedirect($url, 0, 'REDIRECT_HEADER', 'HTTP/1.1 301 Moved Permanently');
		exit;
	}
}
seo301redirectのほうを改善してみたので、これで試してみてください。

http://modxtest2.xsrv.jp/test.html
サフィックスをつけられない問題は、こちらで調べてみましたが再現できませんでした。他に何かヒントになりそうな情報はありますでしょうか?
yamatan
メンバー
メンバー
記事: 6
登録日時: 2013年6月13日(木) 20:46

Re: seo301redirectプラグインについて

投稿記事 by yamatan »

yama様

seo301redirectの問題は解決しました!
あまり一般的ではない問題にまでご指導いただけるなんて、
とても感謝しています。

親リソースを0に指定したリソースについては、
サフィックスにデフォルトで入っている .html は反映されず、どれも/がURLの末尾についています。
それ以外のリソースにはURLの末尾に .html が追加されています。
これは、フレンドリーURLの設定でエイリアスパスを使用しない指定にしても同じでした。
上記の件については、
フレンドリーURL のディレクトリ表現に「はい」のチェックが入っていたため
「子リソース」が存在するリソースのURLの末尾には常に「/」のサフィックスが挿入されていました。

エイリアスパスを使用してURLを表現したかったので、何も考えずに「/」が必要だろうと思い込んで
ディレクトリ表現に「はい」のチェックを入れていましたが、「いいえ」の状態でもエイリアスパスを使用した際は
プレフィックスを空欄にした場合でも「/」が自動で付加されるので不要だったみたいです。

逆に、デフォルト状態のプレフィックスに「/」を指定していると
http://mysite123.com/works//catalogue.html ←アクセスできます
/works ←ドメインのないURLになりアクセス不可
の状態になり、うまくいきませんでした。


現在のフレンドリーURLの設定は以下の通りです。
  • フレンドリーURLを使用:はい
    ●プレフィックス:空欄
    ●サフィックス:空欄
    ●ディレクトリ表現:いいえ
    ●個別の拡張子表現:はい
    ●エイリアスを使用:はい
    ●エイリアスパスを使用:はい(いいえでも問題なく動いています)
    ●重複エイリアスを許可:いいえ
    ●エイリアス自動生成:無効
この設定で問題無く動いています。
単純に、設定を理解していないため発生した問題だったかもしれませんので
お騒がせして申し訳ありません。

過去スレに、ディレクトリ表現とサフィックスの関係はあったのですが、
プレフィックスについてのコメントがなかったので、あくまで失敗の一例と
してみていただけるとたすかります。
返信する