2
1
0

ページのURL形式をすべてpageId形式にすることはできるでしょうか?

 

ページタイトルにマルチバイト文字が含まれていると

https://XXXX/pages/viewpage.action?pageId=XXX

というpageId形式のURLになりますが、

シングルバイト文字だけで構成されたページの場合

https://XXXX/display/[spacename]/[pagetitle]

という形式のURLになってしまいます。

 

タイトルを変更するとURLも変わってしまう為、リンクURLを共有してからタイトルの変更があったりするとアクセスできないなどの事象が起きています。

「ページへのリンク...」のタイニーリンクを使えば、タイトル変更した際のURL変更にも対応してくれているようですが、できればpageId形式にすべて統一したいと考えています。

    Commentコメントを追加...

    1 回答

    1.  
      2
      1
      0

      Atlassianへの要望について

      強制的にpageIdのURLにする手順が欲しいとリクエストがありました。

      ユーザから旧Versionでのパッチが提供されましたが、Won't Fix で終了しています。

      https://answers.atlassian.com/questions/130665/always-show-confluence-url-in-page-id-format

      https://jira.atlassian.com/browse/CONF-27966

       

      JavaScriptで強制的にpageId形式のURLへリダイレクトさせる方法

      カスタムHTMLの、「BODY の最後」に、以下JavaScriptを入れてください。
      1度ページが表示してしまいますが、その後pageId形式のURLへリダイレクトさせます。

      <script type="text/javascript">
      AJS.toInit(function() {
      /* 1. pageid 数値変換 (pageidがなければ処理しない) */
      var pageId = parseInt(AJS.Data.get('page-id'), 10);
      if (!pageId) {
        return;
      }
       
       
      /* 2. 基準URL作成 */
      var  spaceKey = AJS.Data.get('space-key');
      var pageTitle = AJS.Data.get('page-title');
       
      // タイトルベースのURL : <Confluence Base URL>/display/<Space Key>/<Page Title>
      // TODO: 理想はページタイトルまで見るべきだが条件が複雑なためスペースまでを見る
      // ref. https://confluence.atlassian.com/display/CONFKB/Confluence+Page+URL's+Contain+pageId+Instead+of+The+Page+Title
      var titleUrl  = AJS.Data.get('context-path') + '/display/' + spaceKey + '/';
       
      // pageIDのURL : <Confluence Base URL>/pages/viewpage.action?pageid=<pageid>
      var pageIdUrl = AJS.Data.get('context-path') + '/pages/viewpage.action?pageId=' + pageId;
       
      // アクセス中のURL
      var locationUrl = location.pathname + location.search + location.hash;
       
       
      /* 3. アクセス中のURLがタイトルベースのURLかチェックする */
      var isTitleUrl = null;
      if (locationUrl.length < titleUrl.length) {
          isTitleUrl = false;
      } else if (titleUrl === locationUrl.substr(0, titleUrl.length)) {
          isTitleUrl = true;
      } else {
         isTitleUrl = false;
      }
       
       
      /* 4. タイトルベースのURLの場合 pageidベースにリダイレクトさせる */
      if (isTitleUrl === true) {
          location.href = pageIdUrl + location.hash;
      }
       
      });
      </script>
      
      

      (警告) 簡単にしか検証していません。

      (警告) リダイレクトするため、2回リクエストします。多少の負荷は増えます。

       

      1. 是永 誠

        回答ありがとうございます。

        基本機能としては備わっていないのですね。。。

        上記のjavascriptだとページが表示されてからリダイレクトされるとのことなので、導入は見送ろうかと思います。

      Commentコメントを追加...