index.phpをエントリポイントにする
主に PHP では、ベースディレクトリに配置した index.php をプロキシとして使うことが多い。
これにより、以下のようなメリットがある。
ファイルの配置にかかわらず、URLからのルーティングを自由に設計することができる。
URLのパス自体にパラメータを含むことができるようになる。クエリ文字列を使わなくても良くなる。
IDが1234のアイテムの編集
クエリ文字列があるとキャッシュされにくいという問題がある。
Apache httpd の場合
.htaccess を使う場合
あらかじめ Apache httpd の設定に .htaccess を有効にする設定を書く。
code:.htaccess
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php L RewriteCond %{REQUEST_FILENAME} !-f はURLに対応するファイルがある時にはファイルを優先するという指示。
RewriteCond %{REQUEST_FILENAME} !-d はURLに対応するディレクトリがある時にはディレクトリを優先するという指示。
Nginx の場合
code:conf
server {
...
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
...
}
try_file は URL に対して、引数ごとに存在をチェックしてURLをリライトする。
1つ目の引数はファイル
2つ目の引数はディレクトリ
3つ目の引数は index.php
3つ目の場合にはクエリ文字列を残す。($args も $query_string も同じ意味。$is_args に合わせるなら $args の方が良い?)
$is_args はクエリ文字列が空の時は空文字列、クエリ文字列がある時には?に変換される。
$is_args の代わりに?を直接書いても実際のところ問題なく動いてしまう。