We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 6158
    • 224 Posts
    こんばんは。

    Friendly URL と alias path の設定において、困った事態になっています。
    お分かりの方がいらっしゃれば、お教え願えますか。行った作業は以下の通りです。

    (1) Administration > System configuration > Friendly URL settings
    [table]
    [tr][td]Use friendly URLs[/td][td]Yes[/td][/tr]
    [tr][td]Prefix for friendly URLs[/td][td]’’[/td][/tr]
    [tr][td]Suffix for friendly URLs[/td][td]’.html’[/td][/tr]
    [tr][td]Use friendly aliases[/td][td]Yes[/td][/tr]
    [tr][td]Use friendly alias path[/td][td]Yes[/td][/tr]
    [tr][td]Allow duplicate aliases[/td][td]No[/td][/tr]
    [tr][td]Automatically generate alias[/td][td]no[/td][/tr]
    [/table]

    (2) ht.access を .htaccess に改名する。

    (3) ドキュメント・ツリーのルートにドキュメント A を、
    さらにドキュメント A の下にドキュメント B, C を作成する。

    [table]
    [tr]
    [td]Title[/td]
    [td]titleA[/td]
    [td]titleB[/td]
    [td]titleC[/td]
    [/tr]
    [tr]
    [td]Long title[/td]
    [td]longA[/td]
    [td]longB[/td]
    [td]longC[/td]
    [/tr]
    [tr]
    [td]Document’s alias[/td]
    [td]aliasA[/td]
    [td]aliasB[/td]
    [td]aliasC[/td]
    [/tr]
    [tr]
    [td]Menu title[/td]
    [td]menuA[/td]
    [td]menuB[/td]
    [td]menuC[/td]
    [/tr]
    [tr]
    [td]Show in menu[/td]
    [td](checked)[/td]
    [td](checked)[/td]
    [td](checked)[/td]
    [/tr]
    [tr]
    [td]All Document Groups (Public) [/td]
    [td](checked)[/td]
    [td](checked)[/td]
    [td](checked)[/td]
    [/tr]
    [tr]
    [td]id[/td]
    [td]10[/td]
    [td]11[/td]
    [td]12[/td]
    [/tr]
    [/table]

    配置構成は以下の通りである。
    全て Page Settings > Published にチェックを入れて、公開している。
    aliasA (10)
     |
     ├ aliasB (11)
     |
     └ aliasC (12)

    (4) 何の装飾もないテンプレート (plain) を用意する。
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
    </head>
    <body>
    [[DropMenu? &startDoc=`10` &levelLimit=`1`]]
    <h2 class="longtitle">[*longtitle*]</h2>
    <div id="workspace">
    [*content*]
    </div>
    </body>
    </html>


    ....以上で、http://mysite.com/aliasA.html にアクセスすると、
    * menuB (url http://mysite.com/aliasA/aliasB.html)
    * menuC (url http://mysite.com/aliasA/aliasC.html)
    longA
    と表示され、menuB/C の URL を確認すると予想通りになっています。() 内は
    確認した URL です。

    しかし、上記ドキュメント B へのリンクをクリックして、ドキュメント B の
    ページに移動し、そこに表示される DropMenu からの出力を確認すると、以下
    のようになっています。
    * menuB
    * menuC (url http://mysite.com/aliasA/aliasA/aliasC.html)
    longB
    "aliasA" が 2 重に出力されています。"aliasA" は 1 つだけだと思うのですが。

    これは、私の環境 (modx 0.9.2.1) で "use friendly alias path : Yes" と設
    定した時に起きています。"No" にすると path "aliasA" が表示されないので、
    問題なくページは表示されます。


    この原因がお分かりの方、もしくは同様な現象が起きていて解決された方がい
    らっしゃいましたら、解決方法をお教え願えますでしょうか。


    p.s.
    ----
    xampp を使って localhost で mod_rewrite を使えるようにすれば、処理を追
    いかけられるのですが、設定に失敗しており、friendly url を local では使
    えていません。
      • 15537
      • 10 Posts
      私も一度これではまってしまったことがあるのですがテンプレートの<head></head>間に
      <base href="[(site_url)]" />

      入れ忘れていたのが原因でした。

      上記を入れることにより解決できるかと思います。
        • 6158
        • 224 Posts
        こんにちは。

        kecha さん、お返事ありがとうございます。

        Quote from: kecha at Oct 19, 2006, 11:25 PM

        テンプレートの <head></head> 間に <base href="[(site_url)]" /> 入れ忘れていたのが原因でした。

        <base> を入れたところ、無事期待通りの URL が出力されるようになりました。

        何が効いてるのか DropMenu の中身を追わないと分かりませんが、<base> を入
        れなくても済むようにしたいですね。


        kecha さん、本当に情報ありがとうございました。
          • 6158
          • 224 Posts
          こんにちは。

          何故二重に出てしまうのか腑に落ちなかったので調べてみました。

          <base href="[(site_url)]" /> を指定してもしなくても、
          modx 自体は [[DropMenu]] に指定した startDoc からの相対パスで <a> タグ
          href を正しく出力しています。

          問題は、ブラウザがそのパスを解釈する際に、URL をどう生成しているかとい
          う点です。

          ブラウザはその時表示されている URL と <a> タグ href を元に URL を生成し
          ているようです。

          http://mysite.com/aliasA/aliasB
          というページを表示している時に、そのページ内の
          <a href="aliasA/aliasC">C</a>
          という別なリンクをクリックすると、aliasB が取り除かれ、その後に
          aliasA/aliasC が付け足されているようです。
          http://mysite.com/aliasA/aliasA/aliasC

          ですので、教えてもらった通り、<base> を決めてあげればこの問題は解決します。



          ちなみに、
          <base href="[(base_url)]" />
          でもいいんじゃないかとも思いましたが、そうすると
          / + aliasA/aliasC ===> http:///aliasA/aliasC
          と URL を生成されてしまいますので、正しくアクセスできなくなりました。



          p.s.
          ----
          DropMenu (modx 0.9.2.1) のコードを見ていて「正常に動かないだろ!?」、
          という箇所がありましたので取り敢えず報告しておきます。

          (1) 65: $removeNewLines
          (2) 99: $selfAsLink
          (3) 111: $showDescription

          この3箇所で、(string == boolean) という判定を行っているので、結果は必ず
          true となってしまいます。

          解析直後のスニペットのパラメータは、string 型なので、型変換か boolean
          を ’true’,’false’ としないと期待通りの結果にはならないでしょう。