.htaccessの内容に以下を加えてみる。
# RewriteEngineを有効にする
RewriteEngine On
# .php 拡張子を省略してアクセスできるようにする
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/.]+)$ $1.php [L]
# .html 拡張子を省略してアクセスできるようにする
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/.]+)$ $1.html [L]
すると
https://example.com/app.html
でしかアクセスできなかったものが、
https://example.com/app
でアクセスできるようになる!
試す際はバックアップを忘れずに!自己責任で!
解説(概要)!
RewriteEngine On・・・これは、リダイレクト(書き換え)機能をOn(有効)にするよ~という意味。
RewriteCond ~ ~ (~)・・・この行は、リダイレクトを、実施するか否かを条件を指定する。ifのような感じ
今回の場合だと、
%{REQUEST_FILENAME}
で、リクエストされたファイル/パスを取得しようとします。
!-d
で、ディレクトリでない場合(ある場合は -d)、
!-f
で、ファイルでない場合(ある場合は -f)
これらを組み合わせてここまでの動作がされます。
つまり、リクエストされたものが、 「ディレクトリでない」かつ「ファイルでない」場合
に実行されるのが今回の実装の仕組み&内容です。
最後に
RewriteRule・・・先ほどの条件が満たされた/満たされない場合に、転送する先のURLを示します。今回の場合は、正規化表現ですが、詳しく見ると
少し難しいですが、
.phpと.htmlに分かれているだけで、それ以外の部分は同じです。
正規表現の説明をさせていただきます。(即席のスライドで見づらくて恐縮ですが)
このような形で正規化し、設定します。
$1.html(.php) [L]
で、$1で、先ほどの正規化部分から取り出し、.htmlや.phpなどの拡張子を付け、リダイレクトをします!
ちなみに、REWRITECONDで、今回は、リクエストされたファイル/パスを取得するために、REQUEST_FILENAMEを使用しましたが、それ以外にもいくつかの変数が使用できます。