phpスクリプトに拡張子なしでアクセスするためにapacheのhttpd.confで何を設定すべきなのか?

【この記事の所要時間 : 約 6 分

自宅サーバから別サーバへ本ブログを含むアプリを移行した時にちょっと躓いたことをメモしておく。
PATH_INFOと拡張子隠し」にて、SEO対策として拡張子を隠し、PATH INFOを利用しよう!と書いているが、自宅サーバでは、「kawama.jp: phpスクリプトに拡張子なしでアクセスするためには」にもあるように、「Options MultiViews」を利用していた。
ちなみに上記サイトでは、httpd.confに記述していたが、自宅サーバでは、.htaccessを有効にしてそこに記述していた。今回移行したサーバでも自宅サーバと同じように .htaccess に記述しているにもかかわらず、phpスクリプトに拡張子なしでアクセスできなかった。
うまくいかない原因は、httpd.confにあった。
つまり、httpd.conf にてそのディレクトリのAllowOverrideが有効になっていなかったため、.htaccess に記述しても反映されていなかった。だからphpスクリプトに拡張子なしでアクセスできなかったようだ。
ということで、httpd.conf に以下のように記述
<VirtualHost *:80>
    DocumentRoot /usr/local/apache/htdocs/hoge
    ServerName hoge.hogehoge.com
    <Directory /usr/local/apache/htdocs/hoge/>
        AllowOverride all
        Options MultiViews
    </Directory>
</VirtualHost>

これで問題なく、phpスクリプトに拡張子なしでアクセスできるようになった。
まだこのあたりをきちんと理解していないようなので、がんばって理解しようと思う。
最近のApacheではデフォルトでは .htaccess による設定は無効化されている。
なぜなら、デフォルトのhttpd.conf では以下のようになっているからである。
<Directory />
  Options FollowSymLinks
  AllowOverride None
</Directory>

これは、ディレクトリ「/」以下、つまり全てのディレクトリ対して、設定の上書きが禁止するという意味なので、CGI の実行などが出来なくなっている。これを解除するには、ここの AllowOverride の値を変えて対応する必要がある。たとえば次のようにすれば、.htaccess ファイルで、Options を指定することができるようになり、CGIを有効にしたり、ディレクトリ内の一覧を表示するかどうかを決めたりすることができる。
<Directory />
  Options FollowSymLinks
  AllowOverride Options
</Directory>

・Apache の httpd.conf でのアクセス制御のおさらい
<Directory パス>○○○○○</Directory>

Directory の後ろに指定した「パス」を対象に、<Directory パス>から</Directory>で囲まれた中に記述されているオプションを設定する。
「Options 設定項目」と記述し、設定項目が複数ある場合は、「Options 設定項目1 設定項目2」と続けて記述する。
設定項目を明示的に禁止したい場合は、「Options -設定項目」と、禁止したい項目の前にマイナス「-」記号を付ける。

Options設定

Options Indexes : DirectoryIndexで指定されたファイル(例:index.html)がなければディレクトリ内の一覧を表示する。
Options -Indexes : DirectoryIndexで指定されたファイルがなければ、ディレクトリ内の一覧を表示せずに、エラーを返す。
Options FollowSymLinks : シンボリックリンク先へのアクセスも許可する。
Options FollowSymLinksIfOwnerMatch : シンボリックリンク先のアクセスはオーナー権限が一致しないと許可しない。
Options ExecCGI : CGI を有効にする。
Options Includes : SSIを有効にする。
Options IncludesNoExec : SSIを有効にするが、EXEC命令(CGIプログラムを実行する命令)は無効にする。
Options MultiViews : 言語ネゴシエーション機能を有効にする。
Options All : MultiViewsを除いた以下のようなすべてが利用可能。今回のようにphpスクリプトに拡張子なしでアクセスしたい場合などに利用する。

ちなみに、DirectoryIndexで指定されたファイル(例:index.html)などは、httpd.conf の DirectoryIndex という場所に記述してある。
デフォルトでは、以下のようになっている。
DirectoryIndex index.html index.html.var
これは、まず index.html を探して、無ければ index.html.var を探すということ。
以下は、参考サイト。
SSIは許可するがプログラム実行(exec)だけは禁止したい
Apache の基本的な設定
以下、参考までに。
apacheにおいて同時接続数(MaxClients)をいくつに設定すべきか?
より詳しく知りたい方はこちらへ

Apacheポケットリファレンス (POCKET REFERENCE)
WINGS プロジェクト 高江 賢
技術評論社
売り上げランキング: 293,906
スポンサーリンク
レクタングル(大)広告
  • このエントリーをはてなブックマークに追加
スポンサーリンク
レクタングル(大)広告

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください