PowerCMS

PowerCMSでAbs2Relを使うときの注意メモ

出力されるファイル内のパスを相対パスに一括置換してくれる便利なプラグインですが、仕様的にハマることもあるので覚書を残しておきます。

置換する対象

  • href, src, action属性内に記載されている絶対パスまたはルート相対パス
  • 絶対パスの場合はウェブサイトURLとドメインが一致している場合のみ置換

つまり
<p>http://example.com/</p>
<meta property="og:url" content="http://example.com/">

は置換されず
<meta rel="canonical" href="http://example.com/">
<link rel="stylesheet" type="text/css" href="/css/style.css">

は置換されます。

置換するタイミング

  • すべてのMTタグがパースされたあとで置換される

replaceモディファイア等で文字列の置換を行っても、さらにその後でAbs2Relの置換が行われます。
MTタグで工夫してAbs2Relの置換を回避するのは難しいようです。

置換対象から除外したい場合

  • 拡張子単位での除外が可能
  • ディレクトリ単位での除外が可能
  • 除外したいパスが固定値の場合はそのパスだけ除外可能
  • 除外したい部分をphpで記述する
  • 除外したい部分をssiで読み込む

index.htmlが補完される問題

同階層のディレクトリを指定するようなパスの場合、index.htmlに置換されて省略することができません。
http://example.com/privacy.html 内で href="/" というような指定をした場合になります。URLの正規化をしたい時に困ります。
301リダイレクトでOKなら問題なし。

まとめ

パスの指定が細かい場合やcanonicalの指定が必要ならregex_replaceで必要な部分だけ置換していく方がよさそうです。