DirectorySlashディレクティブ:ディレクトリを表すURLの末尾がスラッシュでない場合の扱い

DirectorySlash ディレクティブは、リクエストの URL がディレクトリを指しており、且つ末尾がスラッシュ(/)でない場合にスラッシュを加えてリダイレクトするかどうかを設定する場合に使用します。ここでは Apache の DirectorySlash ディレクティブの使い方について解説します。

(Last modified: )

DirectorySlashディレクティブの使い方

DirectorySlash ディレクティブは URL の末尾がスラッシュ(/)でなく且つディレクトリへの指している場合にスラッシュを加えてリダイレクトするかどうかを設定します。書式は次のとおりです。

DirectorySlash On|Off

記述できる場所は httpd.conf, VirtualHost, Directory, .htaccess です。 .htaccess で設定する場合は AllowOverride Indexes が設定されている必要があります。

On を設定した場合はスラッシュを加えてリダイレクトします。 Off の場合は何もしません。デフォルトは On です。

例えば DirectorySlash On になっている状態で、次の URL へアクセスがあった場合で考えてみます。

http://www.example.com/dir

この URL の末尾にはスラッシュ(/)がありません。もし この URL が表す dir ディレクトリが実際に存在した場合、末尾にスラッシュを加えて次の URL へリダイレクトされます。

http://www.example.com/dir/

もし DirectorySlash Off になっている状態で、次の URL へアクセスがあった場合、末尾にスラッシュを自動で付与しないためそのままの URL へアクセスされます。

http://www.example.com/dir

注意点として通常ディレクトリへアクセスした場合、 DirectoryIndex ディレクティブが設定されていれば設定されている index.html や index.php などがクライアントへ返されるのですが、 DirectoryIndex ディレクティブは末尾にスラッシュ(/)がある場合だけ適用されるため、スラッシュがない URL へアクセスがあった場合はディレクトリに含まれるファイルのリストが表示されてしまいます。

※ DirectoryIndex ディレクティブについては「DirectoryIndexディレクティブ:ディレクトリへのリクエストに対してどのファイルを返すのか」を参照されてください。

動作確認

それでは実際に試してみます。ドキュメントルートの中に blog ディレクトリが作成されています。 blog ディレクトリには index.html ファイルが配置されています。

動作確認(1)

ブラウザから次の URL へアクセスします。

http://localhost/blog

動作確認(2)

すると末尾にスラッシュが付けられた URL へ自動的にリダイレクトされて、新しい URL が指し示すコンテンツがクライアントへ返されました。

動作確認(3)

次に DirectorySlash ディレクティブを Off に設定してみます。 httpd.conf ファイルの末尾に次の記述を行います。

DirectorySlash Off

httpd.conf ファイルを保存したあとで Apache を再起動します。そのあとでブラウザから次の URL へアクセスします。

http://localhost/blog

すると今回は末尾にスラッシュが追加されず、そのままの URL でアクセスした結果が表示されます。先に解説したように、末尾にスラッシュがない場合は DirectoryIndex ディレクティブの設定が適用されないため、ディレクトリに含まれるファイルのリストが表示されます。

動作確認(4)

-- --

Apache の DirectorySlash ディレクティブの使い方について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。