プロキシ配信ディレクティブを使用した NGINX の書き換えが正しく機能しない
P粉063862561
P粉063862561 2024-01-10 17:32:41
0
1
364

私は現在、古い Symfony バージョン (2.8 から 3.4 にアップグレード中) で実行されるレガシー API を開発しています。

アプリケーションには、app_dev.phpapp.php という 2 つの「メイン」PHP エントリ ポイントがあります。 _dev エンドポイントは開発環境でのみ使用する必要がありますが、古い運用アプリケーションでは誤って使用されます。

このファイルの公開を避けるために API を簡単に変更することはできますが (実際に成功しています)、API に接続する一部のアプリケーションを簡単に更新することはできません。たとえば、一部のアプリケーションは依然として https://domain/app_dev.php/the/path を使用して接続を試みています。

API を使用するアプリケーションの修正に取り組んでいる間の一時的な解決策として、 https://domain/app_dev.php/the/path https://domain/app_dev.php/the/path に書き換えたいと思います。 Domain/app.php/the/path またはさらに良いのは https://domain/the/path です。 私たちは書き換えが正しい選択であると信じていますが、もしかしたら正しくないかもしれません?

NGINX の現在の構成は次のとおりです:

リーリー リーリー メインの server ブロックや location / などのさまざまな場所に rewrite /app_dev\.php/(.*) /app.php$1 Break; を追加してみました。 がブロックされており、リダイレクトが機能していないようです。 breaklast

を使用してみましたが、API からはコンテンツのない 500 応答しか得られませんでした。

location ~ ^/app\.php(/|$) {location ~ ^/(app|app_dev)\.php(/|$) {## に更新すると# 正常に動作するので、API が NGINX の背後で「動作」していることがわかります。

POST リクエストも書き直す必要があるため、301 リダイレクトはここでは機能しないことに注意してください。ただし、これを 301 リダイレクトとしてテストし、期待どおりの結果が得られました (ただし、301 は POST リクエストでは機能しません)。 リーリー

中断するように設定した場合:

リーリー

最後に設定した場合:

リーリー

それでは、私の質問は、この書き換えをどのように機能させるかということです。

https://domain/app_dev.php/the/path のような URL を https://domain/app に書き換えます。 php /the/path さらに良いhttps://domain/the/path?

P粉063862561
P粉063862561

全員に返信(1)
P粉642920522

/app_dev\.php/(.*) /app.php$1 Break; 書き換えようとしましたが、 break は不正なフラグです - ## を使用する必要があります# やっと###。 强>rewriteディレクティブを参照してください。 p>また、POST リクエストをリダイレクトするには、


307 ステータス レスポンス

を使用できます。例: リーリー 必ず

location ~ \.php$

ブロックの上に配置してください。

location ~ ^/app\.php(/|$)

ブロックが internal とマークされていることに気付きました。これにより、サーバーは に対する外部リクエストに応答できなくなります。 >/app.php。これはあなたの質問の記述の一部と矛盾しているようです。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!