contentsArea

Dreamweaver CS3でフォルダへのリンクの不具合を解決するハック

  • 2008-02-19 (火) 16:30
  • Web

Dreamweaver CS3でテンプレートもしくはライブラリを使用中、フォルダに対して相対リンクをしたときに正常にリンクがされない、末尾のスラッシュが外れてしまう、などの不具合があります。今回は、それらを回避するハックをご紹介。

不具合その1:テンプレートでルートフォルダをリンク先に指定したとき、ルートフォルダ直下のファイルのみさらに1階層上を指定してしまう

まず、再現してみます。テンプレートを作成して、編集可能領域以外の部分にサイトルートフォルダへのリンクを貼ります。

<a href="../">サイトルートへのリンク</a>
(/Templates/test.dwt内)

そして、このテンプレートからhtmlを作成、サイトルート直下に保存し、さっき作ったリンクを見てみると……

<a href="../">サイトルートへのリンク</a>
(/test.html内)

……あれ? ここはサイトルート直下だからhref="./"になるべきでは?

試しに、1階層下のデータを作って、そっちを確認してみると、

<a href="../">サイトルートへのリンク</a>
(/folder/test.html内)

……これは正しく設定されてる。

ん?ひょっとしてどこで設定しても"../"にしかなってないんじゃないか?と思いもう1階層下のデータを作ってみると、

<a href="../../">サイトルートへのリンク</a>
(/folder/folder/test.html内)

これも大丈夫。つまり問題があるのはルート直下のファイルのみ。

つまり、「テンプレート内でリンク先としてルートフォルダを相対指定すると、ルート直下のhtml内のみリンク先がさらに一つ上のフォルダになってしまう」という挙動です。ちなみにライブラリで同じようにルートフォルダを相対リンクしたときは、html内ではhref=""という空白になります。

サイトデータをドメイン直下に配置する場合は、さらに一つ上へのリンクといってもドメインのルート=Dreamweaverサイトルートに飛ぶだけなので、実質正しいリンク先ということになりますが、ドメイン内の数階層下に突っ込む場合は、意図せずに上の階層に飛んでしまうことになります。

解決法

「サイト定義の[テンプレート]内で[ドキュメントの相対パスを再書き込みしない]のチェックを外し、テンプレート内でのルートフォルダに対するリンク先は"././"を設定する」

これだけ見ると「え、これって自分自身を参照してるだけじゃない?」と思いますが、テンプレートが適用されたhtmlを見ると、ルート直下ではhref="./"、1階層下ではhref="../"、2階層下ではhref="../../"という正常なリンクになってくれます。

ちなみにライブラリ内のリンクも同様に設定すれば、ルートフォルダへの相対リンクが正常に書き出されます。

不具合その2:ライブラリでフォルダをリンク先に指定したとき、末尾のスラッシュが外れる

これも再現してみます。ライブラリを作成して、特定のフォルダへのリンクを作成します。

<a href="../folder/">フォルダへのリンク</a>
(/Library/test.lbi)

そして、このライブラリをルート直下のhtmlに配置してみると、

<a href="folder">フォルダへのリンク</a>
(/test.html内)

……リンク自体は有効だけど、末尾のスラッシュが外れている。

スラッシュが無くても各ページにアクセスできることはできるのですが、あまり好ましくありません。サーバのレスポンスに影響することもありますし、パッと見たときにも「フォルダにリンクしている」ことが分かりづらくもなりますので。

解決法

「ライブラリ内でのフォルダに対するリンク先は、href="../folder/./"というように最後に"./"を追加して指定する」

これによって、このライブラリが配置されているhtml内では"folder"ではなく"folder/"というリンク先になってくれます。

ちなみに

表題にはCS3と書きましたが、私の記憶が正しければこの不具合は大分前から、8でもMX2004でもMXでも出ていた気がします。つい最近まで解決を諦めていたのですが、ふと思い立って色々試していたら上の二つを発見しました。

両方とも、リンク先にフォルダではなくファイルを指定している場合には、この問題は発生しません。「だったら素直にindex.htmlを省略せず、リンク先はhtmlファイルを指定すればいいじゃん」という声が聞こえてきそうですが、個人的にはリンク先は可能な限り短く、かつ一意であるべきと考えています。

「可能な限り短く」する理由は、フォルダの視認性。
http://yourdomain/folder/index.html
よりも
http://yourdomain/folder/
の方がシンプルで、かつ今どこにいるかを表すフォルダ名が見やすくなります。

「一意であるべき」理由は、パッと思いつくのはソーシャルブックマークへの登録や、検索エンジンの登録が「index.html」ありなしでバラけないようにするため。

また、「リンク先のindex.htmlを省略しない方がサーバの負荷が減る」と言われることもありますが、上記を犠牲にしなければならないほど、このことによるサーバの負荷は大きくないと思っています。

開発者様へ

Adobe Dreamweaver開発ご担当者様へ、上のようなこざかしい真似をしなくても正常にリンクされるように、次期バージョンもしくはアップデートで改善されていることを祈っております。ぺこり。

……でもそういえば、フォルダにリンクしてあるとき、リネームやフォルダの移動をすると自動的にindex.htmlを付与されるときがあったり、フォルダへのリンクはサイトレポートで「破損リンク」扱いになったり、不具合というよりも「Dreamweaverにおいてはそういう使い方をするな」という暗黙のメッセージなのかしら。

最後にふと思ったこと

ここまでさんざんフォルダフォルダと書いてきましたが、「ディレクトリ」って言った方がここでの意味的には正しい気がしてきました。

Dreamweaver CS3 Windows版 Dreamweaver CS3 Windows版

アドビシステムズ 2007-06-22
売り上げランキング : 2111

Amazonで詳しく見る by G-Tools

  • 2008-02-19 (火) 16:30
  • Web
入力した情報を保存する
このエントリのトラックバックURL
九十九電機