リンクにブログコードが混入してリンク切れになる
概要
リンクパスに意図しない「ブログコード」が挿入され、リンク切れ(404エラー)が発生する
発生条件
リンクパスが
/archives/...のように、ルート相対パス(スラッシュ始まり)で出力されている場合。config.server.php の
REWRITE_PATH_EXTENSIONに指定されていない拡張子のファイル(例:.jww , .dwg など)を扱っている場合。
発生例
Twigを使用し、カスタムフィールドでアップロードしたarchivesファイルのパスをそのまま出力した場合などに発生します。
テンプレート側の記述:
<a href="{{ entry.fields.jww.value.path }}" download>Download</a>期待される出力:
<a href="/archives/path/to/file.jww" download>Download</a>子ブログでの実際の出力:
a-blog cms の仕様により、config.server.php の REWRITE_PATH_EXTENSION に指定されていない拡張子のファイルで、かつパスが / から始まる場合、システムが「ブログコード」を補完してパスの書き換えを行います。
<a href="/ブログコード/archives/path/to/file.jww" download>Download</a>※ config.server.php 内で定義されている拡張子(pdf, doc, xlsx等)は自動書き換えの対象外となります。
対策方法
以下のいずれかの方法で回避可能です。
1. class属性に acms_no_rewrite を追加する
リンクに acms_no_rewrite クラスを付与することで、システムによるパスの自動書き換えを無効化できます。
HTML
<a href="{{ entry.fields.jww.value.path }}" class="acms_no_rewrite" download>Download</a>2. config.server.php の設定を変更する
config.server.php の REWRITE_PATH_EXTENSION に、対象となるファイルの拡張子を追記します。
define('REWRITE_PATH_EXTENSION', 'pdf|doc|docx|ppt|pptx|xls|xlsx|lzh|zip|rar|jww|dwg');