ブログのウィジェットで異常なリンクが生成され404となる

【環境情報】
・baserCMSのバージョン:4.4.5
・レンタルサーバー名:ロリポップ
・使用テーマ:オリジナル
・PHPスキル(自己評価):C

【baserCMSの設定】
セーフモード:Off
データベース: MySQL
baserCMSバージョン: 4.4.5
CakePHPバージョン: 2.10.22

類似現象)
4.0.4にしたらグローバルメニューで呼び出されるリンク先アドレスがおかしくなる。|フォーラム|baserCMSユーザーズ 4.0.4にしたらグローバルメニューで呼び出されるリンク先アドレスがおかしくなる。|フォーラム|baserCMSユーザーズ

現象)
お知らせのウィジェット「カテゴリ」「月別アーカイブ」のリンクが長くなって404になる
出力HTML自体がそうなのでPHP側の問題(フロントの問題ではない)

発生のタイミング)
サーバーキャッシュ削除→一時回復→再発
再発のタイミングや間隔はバラバラ

調査)
「ユーティリティトップ > コンテンツ管理 > ツリー構造をチェックする」
で以下のエラー表示

コンテンツのツリー構造に問題があります。ログを確認してください。

→ログの確認方法がわからないため、確認できていません。

私の他にも似た現象起きてる方いるでしょうか?

サブサイトを利用して他言語サイトを構築している過程で、似た現象に遭遇したことがありますが、現時点でまったく再現できません。
因果関係があるかどうかはわかりませんが、その時も、ツリー構造エラーが出ていたように記憶しています。

サブサイトを作成後、コンテンツ一覧画面の編集画面(関連コンテンツタブ)から、メインサイトの各コンテンツ(固定ページ、ブログ、メールフォーム)のエイリアスやファイルをコピーできますが、この作業途中にエラーが出ることが多く、そういったタイミングで、この不具合の原因が起きているんじゃないかと疑っていたりします。
特にコピー元のメインサイトのファイルURLをindex指定している場合です。

確かに親切じゃないですね。
app/tmp/logs/ 内に出力されてるはずなので見てみてください。

@Garyuten

こんばんは。旧フォーラムで投稿した者です。

私の環境では、今でも時々発生しています。
同じく発生の条件はバラバラでこの問題はずっと解決していません。

最近では、ブログのウィジェットのカテゴリでも発生しております。

ロリポップ、SQLiteの環境です。

おはようございます。

こちらの問題、私のサイトでまたまた再発しました。解決方法はないのでしょうか??

@ryuring
この問題、ずっと2017年から続いていますが、整理すると以下の条件で発生しているのではないでしょうか。

  • 「グローバルメニュー」で発生する場合、2階層目で発生していた。
  • 「カテゴリ一覧」で発生する場合、2階層目以上を設定していた。
  • @Garyuten 指摘の「月別アーカイブ」も、年/月となっているので、2階層目で発生では?

どうでしょうか。この辺り解決のヒントになりませんか?

@dbkaiyu こんにちは。
異常なリンクの発生について、具体的な例を頂けますか?

  • スクリーンショット(異常なリンクになる場所をマーキングしてください)
  • 具体的な異常なURL(もちろんドメインは伏せてください)
  • 発生するのはサブサイトかどうか
  • 現在発生しているbaserCMSのバージョン
  • .htaccess の RewriteBase の値

解決できるよう頑張りますので、こちらの環境で再現できるよう情報提供よろしくお願いします。

@ryuring こんにちは。昨夜も発生したところです。

ブログのウィジェットで出力しているカテゴリ一覧の部分です。
発生した場合のURLは最近記録してませんが、旧フォーラム投稿の2017年の投稿と同じだと思われます。

https://forum-archive.basercms.net/modules/newbb/viewtopic.php?viewmode=thread&topic_id=2876&forum=8&post_id=9707#9707

サブサイトでないです。
バージョンは、最新の4.4.8
.htaccess の RewriteBase の値については、触ったことがないなずです。

@dbkaiyu ありがとうございます。
こちらの環境で再現しようとしているのですが同じ状況を作れずにいます。
おそらくですが、コンテンツのツリー構造のデータが壊れている可能性が高いです。
次の動作を確認いただけますか?

設定 → ユーティリティ → ツリー構造をチェックする

その結果を教えて下さい。

コンテンツのツリー構造に問題があります。ログを確認してください。

と表示された場合、どこかのタイミングで、ツリー構造を管理するためのデータが壊れています。
(現在はこのデータが壊れるバグはなおっています)

その場合、「ツリー構造リセット」を実行するしかありません。

こちらを実行すると、コンテンツ管理のフォルダの階層構造がリセットされ全てフラットな状態となります。その状態で改めて、コンテンツやフォルダをドラッグして正しい位置に戻します。

@ryuring 回答ありがとうございます。
教示の方法は、4.0.7の時代に試しているようです。

https://forum-archive.basercms.net/modules/newbb/viewtopic.php?viewmode=thread&topic_id=2876&forum=8&post_id=9997#9997

現状ですが、

コンテンツのツリー構造に問題があります。ログを確認してください。

が表示されます。

(現在はこのデータが壊れるバグはなおっています)

は、4.0.7より後ですか?

@dbkaiyu

ツリー構造の問題は、いくつかありましたが、4.1.1 で最後のバグが解消されているようです。

これだけでは、サイトが表示されませんでした。

次に各公開ページ、ブログの「保存」を全部クリックして更新。
サイトが表示されるようになりました。

サイトが表示されないのは、固定ページ書き出しとサーバーキャッシュ削除を行えば大丈夫なはずです。

「いいね!」 1

@ryuring ツリー構造をリセットしてみました。
リセット後は、ツリー構造に問題がありますの表示はでておりません。
様子を見てみます。
また発生しましたら報告します。
ありがとうございました。

「いいね!」 1

@ryuring リセット後、サーバーキャッシュ削除、ブラウザでCtrl+F5しましたが、症状が発生しました・・・
ツリー構造のチェックでは、

コンテンツのツリー構造に問題はありません。

が表示されています。

@dbkaiyu
データベースの、mysite_contents テーブルのダンプが欲しいのですが頂くことは可能でしょうか?
プライベートメッセージでも構いません。

@ryuring

データベースの、mysite_contents テーブルのダンプが欲しいのですが頂くことは可能でしょうか?

データベースを触るスキルがありません。手順を教えて頂けるとできるかもです。
データベースは、SQLiteです。

@dbkaiyu SQLiteなんですね。では、/app/db/sqlite/baser.db のファイルをプライベートメッセージで送ってもらうことは可能でしょうか?
(パスワードは暗号化されておりこちらでは解析不能ですのでご安心ください)

こちらの件、 @dbkaiyu さんのご協力もあり再現できました。

  1. サーバーキャッシュを削除
  2. index.php の付きの月別アーカイブのURLにアクセスする
    その際、末尾に不要な階層構造を追加
https://localhost/index.php/news/archives/date/2015/06/a/b/c
  1. 内部リンクを確認する
    内部リンクが上記URLの一部(/index.php/news/archives/date/2015/06/a/b/)をベースとしたリンクとなる

https://localhost/about の場合、次のような長いURLとなる

https://localhost/index.php/news/archives/date/2015/06/a/b/about
  1. 上記の状態でウィジェットエリアのキャッシュが生成される

  2. 正常なURLでブログにアクセスする
    https://localhost/news/
    上記のキャッシュが利用され、異常なリンクのカテゴリ一覧などが表示される

  3. 300秒を経過して正常なURLでブログにアクセスする
    キャッシュが300秒に設定されていたため、300秒経過後にアクセスすると正常なURLのウィジェットエリアのキャッシュが生成され元に戻る

おそらくですが、昔、スマートURLとそうでない設置方法があり、そうでない場合に、index.php 付きのURLとなる仕様でした。
(その後、スマートURLに一本化されています)

ブログの日付別の一覧についてはURLとして末尾に何をつけても受け入れる仕様となっているため、Google等のクローラーがそのURLをたどった可能性があります。

https://localhost/index.php/news/archives/date/2015/06/about
↓
https://localhost/index.php/news/archives/date/2015/06/about/service
↓
https://localhost/index.php/news/archives/date/2015/06/about/service/contact

ということで、index.php 付きのURLでGoogle等のクローラーに異常なURLがキャッシュされ、定期的に巡回されることで、定期的に異常なURLが出現し、300秒経過後にアクセスすると元に戻るという現象となっていたようです。

今回は次の対策を講じました。

  • index.php 付きのURLにアクセスした場合、Not Found を出力
  • ブログのアーカイブページにおいて末尾に不要な階層構造を追加したURLにアクセスした場合、Not Found を出力

情報提供にご協力頂いたみなさまありがとうございました!

「いいね!」 1

@ryuring さっそく対応いただきありがとうございました。

「いいね!」 1

この件、ずっと気になってました。解決してよかったです・・

「いいね!」 3