検索して検索しましたが、この問題はどこにも見つかりません。
私たちの設定は理想的ではありません。これは 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/ 呼び出しを停止します。
私はそれを理解できません-どんな助けでも大歓迎です。
ありがとうございました、
ジョシュ