symfonyのroutingとapacheの設定

symfony の apps/front/config/routing.yml の設定内容

# default rules
homepage:
  url:   /
  param: { module: default, action: index }

default_action:
  url:   /:action
  param: { module: default }

default_index:
  url:   /:module/
  param: { action: index }

default:
  url:   /:module/:action/*

こんな感じで、/で終わった場合はmoduleにマッチさせるようにrouting.ymlを書いてみた。

で、問題は/で終わらないdefault_actionの方。apacheは同名のディレクトリが存在する場合、下記のようにリダイレクトを掛ける。

/foo -> /foo/

これをやられると、action名と同名のディレクトリを作成できなくなる。そこで、DirectorySlashをOffにして逃れるという手を使った

http://httpd.apache.org/docs/2.2/ja/mod/mod_dir.html#directoryslash

DirectorySlash Off

こうすれば、ディレクトリがあっても補完されなくなる。

セキュリティ警告

末尾のスラッシュでのリダイレクトをオフにすると、結果的に情報漏洩を 招くことになるかもしれません。 mod_autoindex が有効 (Options +Indexes) で、 DirectoryIndex が有効なリソース (例えば index.html) を指していて、また、要求のあった URL に特別な ハンドラが設定されていない場合を考えてみてください。 この場合末尾にスラッシュのついているリクエストに対しては index.html ファイルが返されます。しかしスラッシュのないリクエストに対しては、 ディレクトリの内容一覧を返してしまいます。

こういうのがあるそうなので

Options -Indexes

を忘れずに指定する