apache-外部の/ api / entity / 1URLを内部の/api/entity.php/1(または/api/entity.php?id=1)に書き換える一般的な方法
PHPで作成しようとしているAPIを使用して、現在、APIのルートディレクトリの.htaccessファイルに次の書き換えルールを設定しています。
# Remove the php extension from the filename
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
これは、APIへのリクエストは、より多くの「RESTfulな」表示されるようにである-ので、代わりにapi/entity.php?id=5
それは次のようになりapi/entity?id=5
-私はさらにいえステップに行く、などの要求のURLを許可したいのですがapi/entity/5
を使用して、api/entity.php/5
またはapi/entity.php?id=5
に正常に書き換えます。
私はこのようなApache書き換えルールを試していました。ここでは、entity/{any number here}
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC]
RewriteRule ^(.+)(\/\d+)$ $1.php$2 [NC,L]
entity
と/5
2つのキャプチャでentity/5
と一致し、内部でentity.php/5
れます。 phpファイルのどのポイントで、リクエストURIまたはそれに類似したものを展開して、パスから値を取得できます。
しかし、このルールはどのような理由でも機能しないため、これを完全に実装するためのapacheの書き換えについては十分に理解していません。このように動作させたいディレクトリごとにハードコードされた書き換えルールを記述できることは承知していますが、実際にはこのジェネリックを維持したいと思います。
ここでやりたいことを実現する実際の方法がない場合は、大量の書き換えルールを作成する必要api/entity?id=5
リクエストがディレクトリと一致しないことを検出する方法があるかどうかも考えていました(これは、デフォルトでapi/entity/5
ようなパスで発生しますか?)-これで別の書き換えが実行されますケース-最初のURLを実行せずに、内部的にポイントされたURLを書き込もうとしますが、これを実装する方法がわかりません。
より経験のある人が私を正しい方向に向けることができますか?
答え :
解決:
Chris Hassが強調したように、この場合、いくつかのバリエーションのPHPルーターを実装する方が理にかなっており、簡単です。
これは、これに遭遇した将来の誰かのために私が見つけたいくつかの例へのリンクです:
https://www.taniarascia.com/the-simplest-php-router/
https://www.educative.io/edpresso/how-to-create-a-basic-php-router
もちろん、私のようにPHPだけを意図的に使用していないのであれば、ライブラリを使用したり、Laravelなどでこれを実行して生活をさらに楽にしたりできない理由はありません。結局、車輪の再発明を行うのはなぜですか?
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。