location /
私はしばらくこれについて頭を悩ませてきましたが、誰かが私のブロックのこれが一致しない理由を理解するのを手伝ってくれませんhttp://chrisbenard.net/wp-content/uploads/2010/12/chromeosalbum.png
か?
に一致し、リダイレクトhttp://chrisbenard.net/wp-content/uploads/2010/12/
していhttp://chrisbenard.net/assets/uploads/2010/12/
ます。
ファイルchromeosalbum.pngは明らかに正しいディレクトリにあります。この問題は、そのディレクトリの下にあるすべてのファイルにまで及びます。
if (!-e $request_filename){
rewrite ^/wp\-content/uploads/(.+)? /assets/uploads/$1 permanent;
}
/?s=query
また、行きたい/search/#?query=query
です。私は試した:
rewrite ^/\?s\=(.*)$ /search/#?query=$1;
それもうまくいかない。私の他の正規表現の置き換えはすべて正常に機能しています。wordpress のインストールから PieCrust に移行したため、これらすべてのリダイレクトを行う必要があります。
(.*)
、(.*)?
、(.+)
、および他のいくつかのバリエーションで最初の正規表現を試しました。エスケープが何らかの形で台無しになっているのではないかwp\-content
と考えて、 を置き換えてみました。.*content
運がなかった。
編集:また、この同じ正規表現は Apache で正常に機能しました (assets ディレクトリの場合、検索正規表現を機能させることができませんでした)。私はこれを使用していました:
RewriteBase /
...
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^wp\-content/uploads/(.*)? /assets/uploads/$1 [NC,R=301,L]
nginxのように文字列の先頭に含まれていないため、Apacheバージョンには先頭のラッシュはありません。繰り返しますが、これらの 2 つを除いて、他のすべての nginx ルールは正常に機能しています。
前もって感謝します!
編集 2:書き換え先が存在する場合にのみ発生することが判明しました。
たとえば、これは正しい URL にリダイレクトします: http://chrisbenard.net/wp-content/uploads/2010/12/garbage.file.png
これは正しい URL にリダイレクトせず、404 を返すだけです (ただし、wp-content を assets に変更すると、正常に読み込まれます): http://chrisbenard.net/wp-content/uploads/2010/12/chromeosalbum. png