正規化できないルールが多数ある場合、.htaccess にルールの長いリストがあり、おそらく長い if-else 条件として動作します。
ルールの長いリストに効率的に書き換えルールを適用する方法はありますか?
正規化できないルールが多数ある場合、.htaccess にルールの長いリストがあり、おそらく長い if-else 条件として動作します。
ルールの長いリストに効率的に書き換えルールを適用する方法はありますか?
はい、.htaccess をまったく使用していません。すべて (画像、js、css などを除く) を index.php に再ルーティングし、ルーティング ビジネスを .htaccess ではなく PHP で処理します。
.htaccess を使用するのは面倒です。すべてを index.php に転送して、そこから移動します。URL が www.google.com/test/bla/bla/ の場合、www.google.com/index.php/test/bla/bla/ に再ルーティングされます。index.php では、文字列 'test/bla/bla/' を展開して、引数を配列に取得できます。
そこからやりたいことは何でもできます。
編集: このソリューションには実際のオーバーヘッドはありません。無限の柔軟性を生み出すだけです。必要なものは次のとおりです。
A) URL パーサー。これは、必要に応じて複雑にすることができます。URLを展開させることができます。それだけです。Reflectionなどの複雑な機能で拡張できます。最小限の URL パーサーには、おそらく 5 行のコードが含まれます。(URL を取得し、展開し、配列を返します。)
B)ある種のルーター/ルーティングメカニズム。URL に基づいて、リクエストを送信する「場所」を決定します。URL パーサーは引数のリストを提供しました。その配列の構造は何ですか?
最初の引数は常にある種のコントローラーですか? 次に、そのコントローラーを見つけてみてください。2 番目の引数は常にアクションですか? そのコントローラー内で対応するアクションを検索します。
それとも...最初の引数は常に特定のページに解決されますか? 次に、その特定のページを含めます。
すべては要件とアプリケーションによって異なりますが、1 つ確かなことは、.htaccess を使用するよりも常に簡単に作業できるということです。URL は同じままですが、処理のみが異なるため、基本的にアプリケーション開発のどの段階でもこれを実装できます。
EDIT2 ああ、そして何か他のもの - このソリューションを実装し、100 ケースの switch ステートメントまたは無限の if/else 条件ブロックのいずれかになる場合: 間違っています。常に何らかの自動ルーティングを行うことができるはずです。
アプリケーションが手続き型コードで動作し、インクルードを使用する場合: すべての「インクルード可能な」ページをフォルダーに置き、ページをインクルードしてページを解決しようとします。存在しない場合は、エラーをスローします。すべてのページを switch ステートメントに入れる必要はありません。特定のページ自体。ユーザーがそのページを表示するのに十分な権限を持っているかどうかを確認してください。ルーティング中はこれを行わないでください。ルーターはセキュリティ コンテキストを認識するべきではありません。
コントローラーを備えたオブジェクト指向構造を使用している場合は、「アクション メソッド」を識別できることを確認してください。docblock、プレフィックス (doSomething()) などを使用して、ルーターが外部からアクセスされるはずのメソッドにのみアクセスできるようにします。セキュリティに関しては、ユーザーがルーターでそのアクションを呼び出すことが許可されているかどうかを検証しないでください。オブジェクト指向アプリケーションでは、100 種類のアクセス制御管理スタイルがありますが、ルーターは単なるルーティング用です。ある種のセキュリティ レイヤーを追加し、ユーザーが入ることができるかどうかをルーターに判断させないようにします。ユーザーが十分な資格情報を持っていないことがセキュリティ メカニズムによって判明した場合は、リクエストを再ルーティングできます。「不正なリクエスト」ページにリダイレクトします。
この回答は少し長すぎて、あなたが求めたものだけでなく、他のトピックについて詳しく説明しています。申し訳ありません。:)
Robin v. G. に同意します。
しかし、プロジェクトが戻って PHP のルーティング メカニズムを変更できないところまで到達した場合は、いつでもReWriteMapを使用できます。