毎度の「そもそもやろうとしてること自体が間違ってる質問」
https://teratail.com/questions/jyl7cyfq0dcnkv
http://localhost/test.phpの.phpを省略してhttp://localhost/testで表示したいって質問は多いけど「.phpを省略すればいいはず」という最初の発想が間違っている。
発想が間違ってるからどんなに検索しても間違った答えにしか辿り着けない。
Laravelなどのフレームワークでは当たり前のように.phpが見えないけど別に省略してる訳ではない。
http://localhost/index.phpに集める。http://localhost/testなら/testへのリクエストが来てると判断。Route::get('test', TestController::class);
index.phpに集めるのはウェブサーバーの仕事。nginxなら
location / {
try_files $uri $uri/ /index.php?$query_string;
}
Apacheなら.htaccess
# Send Requests To Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
結局ユーザー側でやることはウェブサーバーの設定とルーティングを書くだけ。
フレームワークを使う段階では詳しいことを知らなくても使える。
index.phpに集めれば後はフレームワークが上手くやってくれるとだけ理解すれば十分。
.phpを省略してる訳ではない説明終了。
200X年頃はリクエストの調査も自分でコードを書いていた。
http://localhost/index.php/testへのリクエストに対して/testを取り出して振り分け。
リクエストの内容は$_SERVER変数で取得できるので$_SERVER['PATH_INFO']や$_SERVER['REQUEST_URI']を使用。
http://localhost/index.php/testの段階からもう少し進んでindex.phpに集めるウェブサーバーを合わせると/index.phpが消えて現代のルーティングになる。
フレームワークはもっと複雑なことしてるだろうけど基本的な仕組みは同じ。