2

Nginx は静的ファイルのみを提供していますが、一部のファイル名には「?」が含まれています。はい、疑問符です。

「?」を含むすべての URL ファイルが実際に存在する場合でも、404 が生成されます。例えば

> GET /foo?lang=ar.html HTTP/1.1
...
...
< HTTP/1.1 404 Not Found

foo?lang=ar.htmlという名前のファイルが予想される場所に存在しますが。

> GET /foo%3flang=ar.html HTTP/1.1
...
...
< HTTP/1.1 200 OK

rewrite ディレクティブをどのように記述すれば、すべて「?」%3f にリダイレクトされますか?

4

2 に答える 2

1

nginx への http 呼び出しの前に?as をエンコードする必要があります。%3F

その理由は、url RFC がその文字を特殊文字として予約しているためです?(具体的にはセクション 3.3 を参照)。?その結果、nginx は、エスケープされていない文字を URL のパス部分の末尾として正しく解釈します。

于 2012-10-05T17:31:27.120 に答える
1

やなどの特殊文字をエスケープするには、クエリ文字列をURL エンコードする必要があります。?=

具体的には、一度エンコードすると、要求する必要があるファイルの名前は次のようになります。

foo%3Flang%3Dar.html 

encodeURIComponent()Javascriptでは、関数を使用してファイル名を URL エンコードできます。PHPでは、 urlencode().

于 2012-10-05T16:17:32.133 に答える