私は現在、古い Symfony バージョン (2.8 から 3.4 にアップグレード中) で実行されるレガシー API を開発しています。
アプリケーションには、app_dev.php
と app.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;
を追加してみました。 がブロックされており、リダイレクトが機能していないようです。
break と
last
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?
/app_dev\.php/(.*) /app.php$1 Break;
を
書き換えようとしましたが、 break は不正なフラグです - ## を使用する必要があります# やっと###。 强>rewriteディレクティブを参照してください。
p>また、POST リクエストをリダイレクトするには、307 ステータス レスポンス
を使用できます。例: リーリー 必ず
location ~ \.php$ブロックの上に配置してください。
location ~ ^/app\.php(/|$)ブロックが
internal
とマークされていることに気付きました。これにより、サーバーはに対する外部リクエストに応答できなくなります。 >/app.php
。これはあなたの質問の記述の一部と矛盾しているようです。