weblinkのディレクトリ表現と index.html について
weblinkのディレクトリ表現と index.html について
こんにちは。
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 を表示して欲しいなぁ、と思います。
どうでしょうか…。
これは既知の動作でしょうか?
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 を表示して欲しいなぁ、と思います。
どうでしょうか…。
これは既知の動作でしょうか?
Re: weblinkのディレクトリ表現と index.html について
サンプル確認しました。indexリソースをあえて作成した時は、親リソースではなくそれを優先的に出力してほしいということですね。少し難度が高いですが、調整してみます。
この部分、実際に.htaccessを見ていただくと分かるかもしれませんが、WordPressの処理に倣ってrewriteモジュールはほとんど使わずPHP層で処理しています。rewriteモジュール独特のトリッキーな構文を使わずにすむので、なんとかできそうに思います。
この部分、実際に.htaccessを見ていただくと分かるかもしれませんが、WordPressの処理に倣ってrewriteモジュールはほとんど使わずPHP層で処理しています。rewriteモジュール独特のトリッキーな構文を使わずにすむので、なんとかできそうに思います。
Re: weblinkのディレクトリ表現と index.html について
お返事ありがとうございます。
チョット気になったのでデモの設定を変えて、ディレクトリ表現を中止してみました。
ウェブリンクにしてある記事のURLは以下のようになると思いますが、直接入力した場合にはリダイレクトされませんね…。
左ツリーからのプレビューは大丈夫でした。
http://140221185615-799.evo.demo.modx.jp/dirtest.html
もしかすると、ディレクトリ表現の処理とは別の何か別の原因でしょうか。
少なくともディレクトリ表現ONじゃないときは、上記のURLの場合はリダイレクトされていたような気がしますが…。
チョット気になったのでデモの設定を変えて、ディレクトリ表現を中止してみました。
ウェブリンクにしてある記事のURLは以下のようになると思いますが、直接入力した場合にはリダイレクトされませんね…。
左ツリーからのプレビューは大丈夫でした。
http://140221185615-799.evo.demo.modx.jp/dirtest.html
もしかすると、ディレクトリ表現の処理とは別の何か別の原因でしょうか。
少なくともディレクトリ表現ONじゃないときは、上記のURLの場合はリダイレクトされていたような気がしますが…。
Re: weblinkのディレクトリ表現と index.html について
昔のウェブリンクは単純なリダイレクトでしたが、それでは実際のURLと違っていて気持ちが悪いし、SEO的にも不利だろうということで、ある時期から今のように実際のリンク先URLを出力するようになったと思います。もともとウェブリンクはそのようにしたかったように思いますが、当時の開発チームの技術的な問題かも・・shobu さんが書きました:少なくともディレクトリ表現ONじゃないときは、上記のURLの場合はリダイレクトされていたような気がしますが…。
なんにせよ、MODXはCMSとしての性格上、いろんな使い方をする人を想定する必要があると思うので、ここは改善を試みるほうがよさそうですね。
Re: weblinkのディレクトリ表現と index.html について
こちらで書いた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の動きで対応していただけるとあるがたいです。
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 回
Re: weblinkのディレクトリ表現と index.html について
ちょっと気になったので
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リソース 親に飛ぶ 直打ちすると白紙
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リソース 親に飛ぶ 直打ちすると白紙
Re: weblinkのディレクトリ表現と index.html について
こんにちは。追加の検証、ありがとうございます。
スケジュールが詰まりすぎてソース追う時間も取れないのですが、
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を設定した場合、どうなるでしょうか。
よろしければご用意されたデモ画面に入れてみて頂けないでしょうか。
スケジュールが詰まりすぎてソース追う時間も取れないのですが、
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を設定した場合、どうなるでしょうか。
よろしければご用意されたデモ画面に入れてみて頂けないでしょうか。
Re: weblinkのディレクトリ表現と index.html について
同一サイト内でない、別サイトページの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/
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/
Re: weblinkのディレクトリ表現と index.html について
こんにちは。
yamaさんも見てくれているかと思いますが、やはりウェブリンクが本来の機能していないような感じですね。
少し前のご回答は、URL表現の展開の問題と、この問題は切り離して、本来の動作をするようにしておく必要があるという事だと思います。
時間が取れればこちらでソース見てみるのですが、今週、来週は難しいかも…。
私も気づかずに、いくつか環境をアップデートしてしまっているので、状況的には気になるところなのですが…。
yamaさんも見てくれているかと思いますが、やはりウェブリンクが本来の機能していないような感じですね。
少し前のご回答は、URL表現の展開の問題と、この問題は切り離して、本来の動作をするようにしておく必要があるという事だと思います。
時間が取れればこちらでソース見てみるのですが、今週、来週は難しいかも…。
私も気づかずに、いくつか環境をアップデートしてしまっているので、状況的には気になるところなのですが…。
Re: weblinkのディレクトリ表現と index.html について
リソース構造から構成されるURLを直打ちした場合はリダイレクトさせるようにすると本来の動作を兼ねることができそうですね。shobu さんが書きました:URL表現の展開の問題と、この問題は切り離して、本来の動作をするようにしておく必要があるという事だと思います。
Re: weblinkのディレクトリ表現と index.html について
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 の省略として一般的なので、重複でもよいと思います。
ベースパッケージ
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 の省略として一般的なので、重複でもよいと思います。
Re: weblinkのディレクトリ表現と index.html について
リダイレクトは復活させる必要がありますね。
index.htmlの扱いについては少し考えてみます。Apacheなどウェブサーバのindex.htmlは同じフォルダ内で有効な仕様であるのに対し、MODXの場合は親フォルダとの関係も重要なので、いろいろな使い方をする人がいることを考慮して現実的な解を探りたいと思います。おそらくindexエイリアスのリソースを作る人は、親リソースはコンテンツとしてはあまり重視しないことが多いと思います。URLを構成するために必要、という感じですよね。
index.htmlの扱いについては少し考えてみます。Apacheなどウェブサーバのindex.htmlは同じフォルダ内で有効な仕様であるのに対し、MODXの場合は親フォルダとの関係も重要なので、いろいろな使い方をする人がいることを考慮して現実的な解を探りたいと思います。おそらくindexエイリアスのリソースを作る人は、親リソースはコンテンツとしてはあまり重視しないことが多いと思います。URLを構成するために必要、という感じですよね。
Re: weblinkのディレクトリ表現と index.html について
min-oさん、テストありがとうございます。何処で変わってしまったか、切り分けできたと思います。
yamaさん
まず、リダイレクト指定であるウェブリンクそのものへのアクセスが来たときに、最優先の処理がリダイレクトでありさえすれば、
/weblink/
/weblink.html
いずれにしても指定の飛び先に接続が移る。
その接続先が
/weblink/index.html
/weblink/index/
/weblink/hogehoge.html
どのような場合でも、それがまたMODX内のウェブリンクだろうと、通常リソースだろうと、まずは接続先でリダイレクトすべきかそうじゃないのかさえ最初に処理できていれば問題ないように思うのですが、どうでしょうか。。。
min-oさんの検証結果を見て、手元にあった1.0.10J-r3で試してみたら、これは上手くいきます。1.0.10J-r3時点でディレクトリ表現は実装されていたようですが、ウェブリンクの機能は死んでいないようです。
引き続きよろしくお願いいたします。
yamaさん
"index.html" がどこにどの形で現われて、その処理をどうするか、というのは気にされる必要は無いような気がします(ソース見ないと関係するもんだいがあるのかもしれませんが)。yama さんが書きました:index.htmlの扱いについては少し考えてみます。Apacheなどウェブサーバのindex.htmlは同じフォルダ内で有効な仕様であるのに対し、MODXの場合は親フォルダとの関係も重要なので、いろいろな使い方をする人がいることを考慮して現実的な解を探りたいと思います。おそらくindexエイリアスのリソースを作る人は、親リソースはコンテンツとしてはあまり重視しないことが多いと思います。URLを構成するために必要、という感じですよね。
まず、リダイレクト指定であるウェブリンクそのものへのアクセスが来たときに、最優先の処理がリダイレクトでありさえすれば、
/weblink/
/weblink.html
いずれにしても指定の飛び先に接続が移る。
その接続先が
/weblink/index.html
/weblink/index/
/weblink/hogehoge.html
どのような場合でも、それがまたMODX内のウェブリンクだろうと、通常リソースだろうと、まずは接続先でリダイレクトすべきかそうじゃないのかさえ最初に処理できていれば問題ないように思うのですが、どうでしょうか。。。
min-oさんの検証結果を見て、手元にあった1.0.10J-r3で試してみたら、これは上手くいきます。1.0.10J-r3時点でディレクトリ表現は実装されていたようですが、ウェブリンクの機能は死んでいないようです。
引き続きよろしくお願いいたします。
Re: weblinkのディレクトリ表現と index.html について
連投スミマセン。
検証の結果や旧バージョンの動作を見て、これはyamaさんが色々と考える必要もないような理由ではないか、、、と、ソースを追って見ました。
1.0.12でリファクタリングしてextenders以下のsub.documnet.parser.class.inc.php へ移動された sendRedirect のコーディングミスではないでしょうか?
sendRedirectの中で
という流れで転送の方法を決定しているようです。 $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さんが色々と考える必要もないような理由ではないか、、、と、ソースを追って見ました。
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.');
}
$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' になるように書き換えるとか…。
参考になれば幸いです。引き続きよろしくお願いいたします。
Re: weblinkのディレクトリ表現と index.html について
なるほど、ありがとうございます。近日中に反映します