1402272843 ディレクトリパスの末尾に、スラッシュは、付けるべきですか?

 

参考となる URL と合わせてご回答いただけると幸いです。

プログラムを書いてるときにディレクトリのパスをつけるか、どうかで迷います。

つけなかったらディレクトリ、つけたらファイルという分け方ができるので、つけないのが正しいのかなと思っているのですが。

まわりのプログラムを見ると、どうもそうでもなさそうな感じです。

下記の記事も読んだのですが、じゃあ Apache が絡まない場合も、そうだという認識でよいのだろうかと言う疑問もあり、質問いたしました。
[Apache]ディレクトリにはスラッシュを付けるmod_dirの挙動
http://bit.ly/1oAIEq6

回答の条件
  • URL必須
  • 1人1回まで
  • 登録:
  • 終了:2014/06/09 10:46:23
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:JULY No.1

回答回数966ベストアンサー獲得回数247

ポイント400pt

その Apache での挙動に関して、RFC 上にも記述があります。

RFC 3986 - Uniform Resource Identifier (URI): Generic Syntax

上記 URL は、RFC 3986 の「6.2.4. Protocol-Based Normalization」ですが、RFC 3986 はあくまで、URI の表記方法等に関して書いているものであって、パス部で「ディレクトリの時は '/' で終わるべき」といった話は、そもそも RFC の範囲外(「ディレクトリの時は~」というのは、あくまで、HTTP や FTP などのプロトコルに依存する話で、URI 一般の話ではない)で、「3.3 Path」を読んでも、特にそのような決まりは書かれていません。

ですが、上記 URL で、プロトコルによっては、ノーマライゼーションがあるよ、という話で、まさに、「/」で終わらない物を、「/」を付けてリダイレクトする話が書かれています。

この文中に、こんな事が書かれています。

in this case, use of redirection by HTTP origin servers to avoid problems with relative references


「相対的な参照の問題を避けるために」と書かれています。

で、たぶん、こういう事だと思います。

例えば、「http://example.com/abc/」にアクセスして得られた HTML の中に、「../xyz/q.jpg」という指定があったとします。「ディレクトリは '/' で終わる」事が保証されていれば、

  • http://example.com/abc/ と '/' で終わっているから、基準となるパスはディレクトリを指している。
  • だから、指定されたパスは http://example.com/abc/../xyz/q.jpg で、結果、http://example.com/xyz/q.jpg の事を指す。

となります。しかし、'/' で終わってないと、Web サーバ側の処理としては、一度 http://example.com/abc がディレクトリか否かを確認した上で、相対パスを返す必要があります。

Web サーバの処理としては、基準の URL に対する確認処理が一手間増えるだけで、大きな問題ではないですが、パフォーマンス的には若干、'/' で終わっている事を確認する方が有利です。

あと、JavaScript など、クライアント側で相対パスから絶対パスを変換しようとすると、http://example.com/abc が、

  • ルートディレクトリにある abc というファイル
  • abc というディレクトリ

のどちらか判断できないので、「../xyz/q.jpg」の絶対パスを決める事ができません。もし、前者であれば、http://example.com/ を基準に遡ろうとするので、「そんな絶対パスは無い」という事になります。極論すれば「http://example.com/abc.html」という名前のディレクトリも作る事は不可能ではありません(ただ、デフォルトの Apache の設定だと、実際にそういう挙動になるか、ちょっと微妙な気がしますが)。

といった事を考えると、

  • ディレクトリの時に '/' で終わらなければならない義務は無いけど、'/' で終わるようにしておいた方が、都合が良いことが多い。

という事になると思います。

id:domodomodomo

貴重なお時間を割いていただき、
ご回答いただき、誠にありがとうございます(´;ω;`)ブワッ

2014/06/09 10:47:43

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません