.htaccessファイルのフォルダ名として変数を使用すると、500の内部サーバーエラーが発生します
ユーザーが/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
結果のURL/geo/a/n/c/anchorage.json
も入力正規表現(^geo/((.)(.)(.).+)\.json
)と一致するため、書き換えループ(500エラー)が発生します。正規表現をより具体的にすることで、書き換えループを回避できます。例えば。任意の文字(.
)に一致する代わりに、スラッシュ([^/]
)以外のものに一致する可能性があります。
つまり、次のことを試してください。
RewriteRule ^geo/((.)([^/])([^/])[^/.]+)\.json$ /geo/$2/$3/$4/$1.json [QSA,L]
.
とにかくスラッシュにすることはできなかったので、最初のキャプチャグループを(ドット)として残しました。
2 anubhava
このルールを使用して、問題を修正できます。
RewriteRule ^(geo)/((\w)(\w)(\w).*\.json)$ $1/$3/$4/$5/$2 [NC,L]
QSA
クエリ文字列を変更しないため、フラグを使用する必要はありません。