我一直在努力解决这个问题,但是有人可以帮我弄清楚为什么我的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 中运行良好(对于资产目录;我无法让搜索正则表达式工作)。我正在使用这个:
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 版本中没有前导 lash,因为它不像 nginx 中那样包含在字符串的开头。同样,除了这 2 个之外,所有其他 nginx 规则都可以正常工作。
提前致谢!
编辑2:事实证明,它仅在重写目标存在时发生。
例如,这会重定向到正确的 url: http ://chrisbenard.net/wp-content/uploads/2010/12/garbage.file.png
这不会重定向到正确的 url,只会返回 404(但如果您将 wp-content 更改为资产,它将正常加载): http://chrisbenard.net/wp-content/uploads/2010/12/chromeosalbum。 PNG