我一直在這一塊撞了我的頭一陣子,但有人可以請幫我找出爲什麼這在我的location /
塊不匹配http://chrisbenard.net/wp-content/uploads/2010/12/chromeosalbum.png
?nginx返回404後,重寫到存在的url
這是匹配和重定向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,這就是爲什麼我需要做所有這些重定向。
我試過第一個正則表達式,其中(.*)
,(.*)?
,(.+)
和其他一些變化。我甚至嘗試用.*content
替換wp\-content
,認爲可能逃跑會以某種方式搞砸。我沒有運氣。
編輯:此外,這個相同的正則表達式在Apache中工作正常(對於資產目錄;我無法獲得搜索正則表達式的工作)。我用的是這樣的:
RewriteBase/
...
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^wp\-content/uploads/(.*)? /assets/uploads/$1 [NC,R=301,L]
有一個在Apache的版本沒有領先的睫毛,因爲它不包括在字符串的開頭就像是在nginx的。再次,所有其他nginx規則工作正常,但這些例外2.
在此先感謝!
編輯2:事實證明,它只發生在重寫的目的地存在。
例如,這重定向到正確的網址: http://chrisbenard.net/wp-content/uploads/2010/12/garbage.file.png
這並不重定向到正確的網址,只是返回一個404(但如果你改變的wp-content資產,它會加載罰款): http://chrisbenard.net/wp-content/uploads/2010/12/chromeosalbum.png
我想你需要從'wp \ -content'中刪除連字符。我剛剛嘗試過使用別名,它對我很有用:'location〜^/wp-content/uploads /(.*){別名/ your/absolute/path/here/assets/uploads/$ 1; }'。如果文件存在以獲得更好的性能,最好避免測試。或者試試這個:'location〜^/wp-content/uploads /(.*){rewrite ^/wp-content/uploads /(.+)/ assets/uploads/$ 1 permanent; }' –
我不想別名,因爲我想永久重定向。第二個可能會工作,但這並不能讓我將圖像的標題設置與重寫相結合。我不得不復制規則(或者我想移動它們),正如我在下面的答案中發佈的那樣。所以不會讓我接受我的答案2天。 –
你可以直接在'location'塊中使用'add_header'。 –