2

検索して検索しましたが、この問題はどこにも見つかりません。

私たちの設定は理想的ではありません。これは API に関連しています。

/.htaccess ファイル

RewriteEngine On
RewriteBase /
RewriteRule ^api$ /system/api.php [L,NC]

/api/2/.htaccess ファイル

RewriteEngine On
RewriteBase /api/2/
RewriteRule ^ index.php [QSA,L]

フォルダ構造

/
    /.htaccess
    /api
        /2
            /index.php <--- My API 2 file
            /.htaccess
    /system
        /api.php

問題

新しい API の準備が整うまで、ユーザーが /api または /api/ でレガシー API にアクセスできるようにする必要があります。

ユーザーが /api/2/ でも新しい API にアクセスできるようにする必要があります。

.htaccess、mod_rewrite は /api$ ルールの $ (文字列の終わり) を無視しています。ディレクトリに対してそれを無視するルールはありませんが、なぜこれを行うのでしょうか?

What Should Happen - 少なくとも私がしたいこと

/api?URLParam=Hello へのリクエスト - リクエストは /system/api.php にルーティングされるはずです

/api/2?URLParam=Hello へのリクエスト - リクエストは /api/2/index.php に送信されるはずです

実際に何が起こるか

/api?URLParam=Hello へのリクエスト - これらは /api/ へのリクエストへの 301 リダイレクトが返されます (末尾のスラッシュに注意してください) - これは通常は問題になりませんが、/api への jQuery POST 呼び出しが多数あります (末尾のスラッシュなし)。それらがリダイレクトされると、POST データが失われ、/api/ への API 呼び出しが失敗します。

/api/2?URLParam=Hello へのリクエスト - 正常に動作します。

私が試したこと

  • ご覧のとおり、基本的な htaccess ファイルです。
  • /api と /api/ を無視する
  • ルールの順序付け
  • -f -d フラグを両方とも ! そしてインバーターなし。

一時的な修正

/api/ ディレクトリを削除すると、 /api?Param=Hello への呼び出しはまったく問題なく動作し、301 リダイレクトも発生しません。しかし、明らかにこれは /api/2/ 呼び出しを停止します。

私はそれを理解できません-どんな助けでも大歓迎です。

ありがとうございました、

ジョシュ

4

1 に答える 1