.htaccessファイルのフォルダ名として変数を使用すると、500の内部サーバーエラーが発生します

Jul 28 2020

ユーザーが/geo/anchorage.json私のサーバーから要求するとき、私はそれがからのデータを提供するようにしようとしています/geo/a/n/c/anchorage.json

このルールを.htaccessファイルに書き込んでいますが、500内部サーバーエラーが発生しています。

RewriteRule ^geo/((.)(.)(.).+)\.json /geo/$2/$3/$4/$1.json [QSA,L]

ルールをいくつかの部分に分解し、最初の部分をphpスクリプトでテストしてパラメーターを出力しましたが、それは問題なく機能しました。

RewriteRule ^geo/((.)(.)(.).+)\.json /geo/test.php?2=$2&3=$3&4=$4&1=$1 [QSA,L]

エラーの原因となっているのは最後の部分のようですが、何が間違っているのかわかりません。/geo/a/n/c/anchorage.jsonサーバー上に存在することを確認しました。変数をフォルダーとして使用する場合、何か特別なことはありますか?

回答

2 MrWhite Jul 29 2020 at 04:09

結果のURL/geo/a/n/c/anchorage.jsonも入力正規表現(^geo/((.)(.)(.).+)\.json)と一致するため、書き換えループ(500エラー)が発生します。正規表現をより具体的にすることで、書き換えループを回避できます。例えば。任意の文字(.)に一致する代わりに、スラッシュ([^/])以外のものに一致する可能性があります。

つまり、次のことを試してください。

RewriteRule ^geo/((.)([^/])([^/])[^/.]+)\.json$ /geo/$2/$3/$4/$1.json [QSA,L]

.とにかくスラッシュにすることはできなかったので、最初のキャプチャグループを(ドット)として残しました。

2 anubhava Jul 29 2020 at 05:14

このルールを使用して、問題を修正できます。

RewriteRule ^(geo)/((\w)(\w)(\w).*\.json)$ $1/$3/$4/$5/$2 [NC,L]

QSAクエリ文字列を変更しないため、フラグを使用する必要はありません。