ページ 1 / 1
[(site_url)]に異常な値
Posted: 2013年5月14日(火) 15:02
by kazuike
-----
ご利用のサーバ:KDDI S20
MODXのバージョン:1.0.6J-r8
PHPのバージョン:5.2.8
MySQLのバージョン:5.0.45
ブラウザ: Windows7 IE9、iPhone、Android
-----
CSSが効かず、リンクもすべて切れた状態になっていたページがあり、
ソースを見たところベースタグが
コード: 全て選択
<base href="http:/">
となっていました。
フレンドリーURLを使用するため、
各種テンプレートに
コード: 全て選択
<base href="[(site_url)]">
のコードを入れています。
他のページは正しいURLが入っていたのですが、
なぜか、このページだけ[(site_url)]に異常な値が入っていました。
サイトをリフレッシュすれば、とりあえずの回避はできそうですが、
再発を防止したいので、なんとか原因をつきとめられないかと思っています。
どんなことでも良いので、何か参考になりそうな情報はありませんでしょうか?
Re: [(site_url)]に異常な値
Posted: 2013年5月14日(火) 15:16
by kazuike
補足です。
グローバル設定は、以下のようになっています。
・サイトのURL:空欄
・ベースURL:「/」
また、当該リソースの設定は、以下のようになっています。
・キャッシュ制御を行なう:「はい」
Re: [(site_url)]に異常な値
Posted: 2013年5月14日(火) 15:48
by yama
サイトのURLが空欄の場合はsite_urlを動的に生成しますが、この処理はmanager/includes/initialize.phpで行なっています。
Re: [(site_url)]に異常な値
Posted: 2013年5月14日(火) 16:13
by kazuike
ありがとうございます。
とりあえず、再現できそうな気がしないので、
ソースを追ってみました。
assign_site_urlの
コード: 全て選択
$site_url = $scheme . $host . $base_url;
return rtrim($site_url,'/') . '/';
を見る限り、
base_urlは「/」のはずなので、
コード: 全て選択
$host = $_SERVER['HTTP_HOST'];
が、
空か、「:」か「/」の文字のみだった場合に、
[(site_url)]が「http:/」になるということはわかりました。
どういう状況になると、こういうことが起こるのかなぁ…???
Re: [(site_url)]に異常な値
Posted: 2013年5月14日(火) 16:50
by kazuike
壊れたキャッシュが生成された時刻のアクセスログを確認すると、
********.compute.amazonaws.com
からの「HEAD」リクエストでした。
もしかして、
HEADリクエストに対して(もしくは、ボットに対して)は、
$_SERVER['HTTP_HOST']
が空になるとかあるのかなぁ???
ちなみに、
HEADリクエストの場合でも、MODXはページを生成して返すんですよね?
Re: [(site_url)]に異常な値
Posted: 2013年5月14日(火) 17:21
by yama
HEADリクエストのことをよく知らないので調べてみましたが、GETやPOSTのようなものなんですね。GETに近いけど本文は返さない、みたいな。
initialize.phpではなくパーサ本体に入ってからの処理になりますが、おそらく想定外の挙動になると思います。(でも今回の件とは関係なさそう)
Re: [(site_url)]に異常な値
Posted: 2013年5月14日(火) 17:22
by kazuike
さらに補足です。
問題が起こったページは、サイトのトップページで、
問題のキャッシュが生成される数分前にもアクセス「GET / HTTP/1.1」があり、
この時間帯、管理操作は行っていないので、
「********.compute.amazonaws.com」からの「HEAD / HTTP/1.0」で、
キャッシュが生成されているのも不思議です。
Re: [(site_url)]に異常な値
Posted: 2013年5月15日(水) 18:51
by kazuike
この件、後になって気づきました。f(^^;;
HTTP_HOSTって、
アクセス側のHTTPリクエストヘッダ「Host」の情報でしたね。
実際、ツールを使って「Host」に変な値を入れてリクエストしたところ、
「[(site_url)]」は変な値になりました。
HTTP_HOSTが使えないからといって、
SERVER_NAMEもバーチャルドメインでは使えなかったりするので…
結局
グローバル設定「サイトのURL」の設定で対応しました。