weblinkのディレクトリ表現と index.html について

質問全般・改善要望
返信する
shobu
メンバー
メンバー
記事: 91
登録日時: 2011年5月26日(木) 16:54

weblinkのディレクトリ表現と index.html について

投稿記事 by shobu »

こんにちは。

http://140221185615-799.evo.demo.modx.jp/

上記デモサイトに以下のような構造のディレクトリを作成しました。

root+
|
+ ウェブリンク alias は dirtest +
|
+ リソース。alias は index 。本文あり。

ウェブリンクのdirtestはディレクトリ表現オンにより、

http://140221185615-799.evo.demo.modx.jp/dirtest/

となりますが、リンク先をその下層のリソースにしてあるので、メニュー上はsymlink的な動作で

http://140221185615-799.evo.demo.modx.j ... index.html

となり、下層のリソースを示します。

ここで手動でブラウザに

http://140221185615-799.evo.demo.modx.jp/dirtest/

を入れた場合も下層の index.html に飛んで欲しい(飛ぶのが直感的な動作だと思いますが)のですが、そうならないようです。
(不思議な気もするのですが .htaccess のrewriteも関係しているでしょうか)

FirstChildRedirect スニペットなどを使用すれば期待した動作になりますが、index.html の存在意義を考えると前述の操作で index.html を表示して欲しいなぁ、と思います。
どうでしょうか…。

これは既知の動作でしょうか?
アバター
yama
管理人
記事: 3251
登録日時: 2009年7月29日(水) 02:50

Re: weblinkのディレクトリ表現と index.html について

投稿記事 by yama »

サンプル確認しました。indexリソースをあえて作成した時は、親リソースではなくそれを優先的に出力してほしいということですね。少し難度が高いですが、調整してみます。
この部分、実際に.htaccessを見ていただくと分かるかもしれませんが、WordPressの処理に倣ってrewriteモジュールはほとんど使わずPHP層で処理しています。rewriteモジュール独特のトリッキーな構文を使わずにすむので、なんとかできそうに思います。
shobu
メンバー
メンバー
記事: 91
登録日時: 2011年5月26日(木) 16:54

Re: weblinkのディレクトリ表現と index.html について

投稿記事 by shobu »

お返事ありがとうございます。

チョット気になったのでデモの設定を変えて、ディレクトリ表現を中止してみました。
ウェブリンクにしてある記事のURLは以下のようになると思いますが、直接入力した場合にはリダイレクトされませんね…。
左ツリーからのプレビューは大丈夫でした。

http://140221185615-799.evo.demo.modx.jp/dirtest.html

もしかすると、ディレクトリ表現の処理とは別の何か別の原因でしょうか。
少なくともディレクトリ表現ONじゃないときは、上記のURLの場合はリダイレクトされていたような気がしますが…。
アバター
yama
管理人
記事: 3251
登録日時: 2009年7月29日(水) 02:50

Re: weblinkのディレクトリ表現と index.html について

投稿記事 by yama »

shobu さんが書きました:少なくともディレクトリ表現ONじゃないときは、上記のURLの場合はリダイレクトされていたような気がしますが…。
昔のウェブリンクは単純なリダイレクトでしたが、それでは実際のURLと違っていて気持ちが悪いし、SEO的にも不利だろうということで、ある時期から今のように実際のリンク先URLを出力するようになったと思います。もともとウェブリンクはそのようにしたかったように思いますが、当時の開発チームの技術的な問題かも・・
なんにせよ、MODXはCMSとしての性格上、いろんな使い方をする人を想定する必要があると思うので、ここは改善を試みるほうがよさそうですね。
アバター
min-o
メンバー
メンバー
記事: 323
登録日時: 2009年10月07日(水) 18:32

Re: weblinkのディレクトリ表現と index.html について

投稿記事 by min-o »

こちらで書いたweblinkのURL直うちで白紙になるのと似た症状のようです。
http://forum.modx.jp/viewtopic.php?f=32&t=1261

当方ではmodx以前のhtmlサイトから引き継いでいるURLがあるため
shobuさんの書かれたような
weblink/index.html (weblinkでindexにリンク。実際のページはindexのリソース)
という使い方をしているケースがあります。

紙媒体に印刷されたURL(QRコード含む)が weblink/ と weblink/index.html 両方あるので、
どちらからでも同じページにたどり着いてほしいのですが、現状 weblink/ では白紙ですね…。

気がついたものはseo301redirectで対応しているのですが、数がおおいので、weblinkの動きで対応していただけるとあるがたいです。
最後に編集したユーザー min-o [ 2014年2月25日(火) 11:48 ], 累計 1 回
---------
おのうちみん
http://scifitique.org/
http://gender-sf.org/
アバター
min-o
メンバー
メンバー
記事: 323
登録日時: 2009年10月07日(水) 18:32

Re: weblinkのディレクトリ表現と index.html について

投稿記事 by min-o »

ちょっと気になったので
weblink/index.htmlの関係を逆にして、親に実際のリソース、indexをweblinkリソースにしてみましたが同じでした。

1.0.12j-r1のデモサイト
トップページ
http://140225110027-2046.evo.demo.modx.jp/
管理画面
http://140225110027-2046.evo.demo.modx.jp/manager/


http://140225110027-2046.evo.demo.modx.jp/weblink/ ←実際のリソース
http://140225110027-2046.evo.demo.modx. ... index.html ←weblinkリソース 親に飛ぶ 直打ちすると白紙
---------
おのうちみん
http://scifitique.org/
http://gender-sf.org/
shobu
メンバー
メンバー
記事: 91
登録日時: 2011年5月26日(木) 16:54

Re: weblinkのディレクトリ表現と index.html について

投稿記事 by shobu »

こんにちは。追加の検証、ありがとうございます。

スケジュールが詰まりすぎてソース追う時間も取れないのですが、

http://140225110027-2046.evo.demo.modx.jp/weblink/ ←実際のリソース
http://140225110027-2046.evo.demo.modx. ... index.html ←weblinkリソース 親に飛ぶ 直打ちすると白紙

について、デモのメニュー画面についてはweblinkは最終的に展開されたURLが入っているので、href= /weblink/ になってますよね。よって飛び先が /weblink/ になるのは当たり前というか、処理通り。
http://140225110027-2046.evo.demo.modx. ... index.html については手打ちでも min-oさんが投稿されたリンクをクリックしても白紙ですね。

ウェブリンクに設定したものをdittoやwayfinder経由でしか踏んでいなかったので、前述の処理が働いて気づいていなかったのだと思いますが、少し前からウェブリンクがウェブリンクとして機能していなかったということでしょうか。

同一サイトのないの別ページを番号指定ではなく、外部サイトのURLを設定した場合、どうなるでしょうか。
よろしければご用意されたデモ画面に入れてみて頂けないでしょうか。
アバター
min-o
メンバー
メンバー
記事: 323
登録日時: 2009年10月07日(水) 18:32

Re: weblinkのディレクトリ表現と index.html について

投稿記事 by min-o »

同一サイト内でない、別サイトページのweblinkで試してみました。

yahoo (19) alias yahoo
デリポ (20) alias dpz (コンテナ)

どちらもデモサイトをプレビューした場合、サイト内のリンクをクリックした場合は問題ないですが
weblinkのURLを入力した場合は白紙ですね。

http://140225110027-2046.evo.demo.modx.jp/yahoo.html
http://140225110027-2046.evo.demo.modx.jp/dpz/
---------
おのうちみん
http://scifitique.org/
http://gender-sf.org/
shobu
メンバー
メンバー
記事: 91
登録日時: 2011年5月26日(木) 16:54

Re: weblinkのディレクトリ表現と index.html について

投稿記事 by shobu »

こんにちは。

yamaさんも見てくれているかと思いますが、やはりウェブリンクが本来の機能していないような感じですね。
少し前のご回答は、URL表現の展開の問題と、この問題は切り離して、本来の動作をするようにしておく必要があるという事だと思います。

時間が取れればこちらでソース見てみるのですが、今週、来週は難しいかも…。
私も気づかずに、いくつか環境をアップデートしてしまっているので、状況的には気になるところなのですが…。
アバター
yama
管理人
記事: 3251
登録日時: 2009年7月29日(水) 02:50

Re: weblinkのディレクトリ表現と index.html について

投稿記事 by yama »

shobu さんが書きました:URL表現の展開の問題と、この問題は切り離して、本来の動作をするようにしておく必要があるという事だと思います。
リソース構造から構成されるURLを直打ちした場合はリダイレクトさせるようにすると本来の動作を兼ねることができそうですね。
アバター
min-o
メンバー
メンバー
記事: 323
登録日時: 2009年10月07日(水) 18:32

Re: weblinkのディレクトリ表現と index.html について

投稿記事 by min-o »

1.0.10J-r3のデモサイトで確認してみました。

ベースパッケージ
1.0.10J-r3
トップページ
http://140226101926-2001.evo.demo.modx.jp/
管理画面
http://140226101926-2001.evo.demo.modx.jp/manager/

■サイト外に指定したweblink
weblink yahoo (16) alisa yahoo
weblink デリポ (17) alias dpz (コンテナ)
http://140226101926-2001.evo.demo.modx.jp/yahoo.html
http://140226101926-2001.evo.demo.modx.jp/dpz/
直うちで指定したリンクに飛びます。


■サイト内のweblink
■子がweblinkで親に飛ぶ
- フォルダ(実際のリソース (18) alias weblink
- weblink インデックス (19) alias index

http://140226101926-2001.evo.demo.modx. ... index.html
直うちで指定したリンク/weblink/に飛びます。


■親がweblinkで子に飛ぶ
- weblink フォルダ2 (20) alias tes
- 実際のリソース (21) alias index

http://140226101926-2001.evo.demo.modx.jp/tes/
http://140226101926-2001.evo.demo.modx.jp/tes.html
どちらも直うちで指定したリンク/tes/index.html に飛びます。


/tes/ /tes.html /tes/index.html が同じページなのはたしかにSEO的にはよろしくないですが
/tes/ は /tes/index.html の省略として一般的なので、重複でもよいと思います。
---------
おのうちみん
http://scifitique.org/
http://gender-sf.org/
アバター
yama
管理人
記事: 3251
登録日時: 2009年7月29日(水) 02:50

Re: weblinkのディレクトリ表現と index.html について

投稿記事 by yama »

リダイレクトは復活させる必要がありますね。
index.htmlの扱いについては少し考えてみます。Apacheなどウェブサーバのindex.htmlは同じフォルダ内で有効な仕様であるのに対し、MODXの場合は親フォルダとの関係も重要なので、いろいろな使い方をする人がいることを考慮して現実的な解を探りたいと思います。おそらくindexエイリアスのリソースを作る人は、親リソースはコンテンツとしてはあまり重視しないことが多いと思います。URLを構成するために必要、という感じですよね。
shobu
メンバー
メンバー
記事: 91
登録日時: 2011年5月26日(木) 16:54

Re: weblinkのディレクトリ表現と index.html について

投稿記事 by shobu »

min-oさん、テストありがとうございます。何処で変わってしまったか、切り分けできたと思います。

yamaさん
yama さんが書きました:index.htmlの扱いについては少し考えてみます。Apacheなどウェブサーバのindex.htmlは同じフォルダ内で有効な仕様であるのに対し、MODXの場合は親フォルダとの関係も重要なので、いろいろな使い方をする人がいることを考慮して現実的な解を探りたいと思います。おそらくindexエイリアスのリソースを作る人は、親リソースはコンテンツとしてはあまり重視しないことが多いと思います。URLを構成するために必要、という感じですよね。
"index.html" がどこにどの形で現われて、その処理をどうするか、というのは気にされる必要は無いような気がします(ソース見ないと関係するもんだいがあるのかもしれませんが)。
まず、リダイレクト指定であるウェブリンクそのものへのアクセスが来たときに、最優先の処理がリダイレクトでありさえすれば、

/weblink/
/weblink.html

いずれにしても指定の飛び先に接続が移る。
その接続先が

/weblink/index.html
/weblink/index/
/weblink/hogehoge.html

どのような場合でも、それがまたMODX内のウェブリンクだろうと、通常リソースだろうと、まずは接続先でリダイレクトすべきかそうじゃないのかさえ最初に処理できていれば問題ないように思うのですが、どうでしょうか。。。

min-oさんの検証結果を見て、手元にあった1.0.10J-r3で試してみたら、これは上手くいきます。1.0.10J-r3時点でディレクトリ表現は実装されていたようですが、ウェブリンクの機能は死んでいないようです。

引き続きよろしくお願いいたします。
shobu
メンバー
メンバー
記事: 91
登録日時: 2011年5月26日(木) 16:54

Re: weblinkのディレクトリ表現と index.html について

投稿記事 by shobu »

連投スミマセン。
検証の結果や旧バージョンの動作を見て、これはyamaさんが色々と考える必要もないような理由ではないか、、、と、ソースを追って見ました。

1.0.12でリファクタリングしてextenders以下のsub.documnet.parser.class.inc.php へ移動された sendRedirect のコーディングミスではないでしょうか?

sendRedirectの中で

コード: 全て選択

    	if ($type == 'REDIRECT_REFRESH') $header= "Refresh: 0;URL={$url}";
    	elseif($type == 'REDIRECT_META') {
    		$header= '<META HTTP-EQUIV="Refresh" CONTENT="0; URL=' . $url . '" />';
    		echo $header;
    		exit;
    	}
    	elseif($type == 'REDIRECT_HEADER') {
    		// check if url has /$base_url
    		global $base_url, $site_url;
    		if (substr($url, 0, strlen($base_url)) == $base_url) {
    			// append $site_url to make it work with Location:
    			$url= $site_url . substr($url, strlen($base_url));
    		}
    		if (strpos($url, "\n") === false) $header= 'Location: ' . $url;
    		else $modx->messageQuit('No newline allowed in redirect url.');
    	}
という流れで転送の方法を決定しているようです。 $type がどうなっているかで処理を分けているのですが、 if, elseif, elseif で終わっています。 sendRedirect関数での $type デフォルト値を $type= 'REDIRECT_HEADER' としているのですが、document.parser.class.inc.php の prepareResponse からの呼び出し時に $type='' としてしまっています。

$this->sendRedirect($this->documentObject['content'], 0, '', 'HTTP/1.0 301 Moved Permanently');

前述の処理の流れなので、 $type=''の場合に落ちる場所がないため、リダイレクトの方法が決定できないままになってしまうようです。デフォルトが REDIRECT_HEADER ですので、

elseif($type == 'REDIRECT_HEADER') {



else {

で良いんじゃないでしょうか(これで取りあえず期待通りにリダイレクトすることは確認できました)。$type='' でも未指定でもデフォルトの処理に落ちると言うことです。
なにか別の意味があるようならば、既存コードで$type='' にしている箇所は沢山あると思いますので、この処理の頭に $type=='' の時は$type=='REDIRECT_HEADER' になるように書き換えるとか…。

参考になれば幸いです。引き続きよろしくお願いいたします。
アバター
yama
管理人
記事: 3251
登録日時: 2009年7月29日(水) 02:50

Re: weblinkのディレクトリ表現と index.html について

投稿記事 by yama »

なるほど、ありがとうございます。近日中に反映します
アバター
yama
管理人
記事: 3251
登録日時: 2009年7月29日(水) 02:50

Re: weblinkのディレクトリ表現と index.html について

投稿記事 by yama »

返信する