開発テスト用の動的なアプリケーション提供フレームワークをセットアップしようとしています。
私の望ましい結果は、ユーザーがURLにアクセスするときに、URLが次のようにフォーマットされているhostname.com/somecategory/someapplicationname/
かhostname.com/somecategory/someapplicationname
(末尾にスラッシュがない場合)、カテゴリとアプリケーション名が次のように存在する限り、データベースから要求されたアプリケーションをユーザーに提供する必要があることです。かぎ。
一部のアプリケーションがデータベースになく、同じURLのファイルに存在するという特殊なケースがあるため、既存のファイルをどのデータベースレコードよりも優先して提供します。
データベースからの動的コンテンツの場合は正常に機能します。既存のファイルの場合は、最後にスラッシュがある場合にのみ100%機能します。スラッシュがない場合は、適切なファイルが提供されますが、URLはかなり奇妙に見えます。次のように表示されます。hostname.com/somecategory/someapplicationname/?category=somecategory&appname=someapplicationname
つまり、機能しますが、予期しない出力により、ソリューションが完全ではないと感じます。
私はapachemod_rewriteを使用していますが、.htaccessファイルは次のとおりです。
RewriteEngine on
RewriteRule ^([A-Za-z0-9-]+)/([A-Za-z0-9-]+)/?$ route.php?category=$1&appname=$2 [NC,L]
この場合に固有のPHPコードは次のとおりです。読みやすくするために、このスニペットから検証とデータベース接続を削除しましたが、この特定のケースのロジックは保持されています。
$file = $_SERVER['DOCUMENT_ROOT'] . $_GET['category'] . "/" . $_GET['appname'] . "/index.php";
$fileNoPHP = $_SERVER['DOCUMENT_ROOT'] . $_GET['category'] . "/" . $_GET['appname'] . "/index.html";
$_fileExists = file_exists($file);
$_fileNoPHPExists = file_exists($fileNoPHP);
include_once($_fileExists ? $file : $fileNoPHP);
明確にするために、私の質問は次のとおりです。末尾のスラッシュがない場合にのみ、既存のファイルケースがURLの末尾にGETパラメータを追加するのはなぜですか?
御時間ありがとうございます。さらに詳しい情報が必要な場合は、お知らせください。お知らせします。