0

我一直在努力解决这个问题,但是有人可以帮我弄清楚为什么我的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

4

1 回答 1

0

此块匹配和干扰:

location ~* \.(?:ico|svg|css|js|gif|jpe?g|png)$ {
    expires 3d;
    add_header Pragma public;
    add_header Cache-Control "public";
}

即使我做到了,我仍然有一个问题:

location ~* \.(?:ico|svg|css|js|gif|jpe?g|png)$ {
    if (-e $request_filename) {
        expires 3d;
        add_header Pragma public;
        add_header Cache-Control "public";
    }
}

我最终只是在匹配的位置复制了一些重写规则并且它有效,但我不明白为什么。我猜这只是最具体的匹配,所以它忽略了location /.

location ~* \.(?:ico|svg|css|js|gif|jpe?g|png)$ {
    if (-e $request_filename) {
        expires 3d;
        add_header Pragma public;
        add_header Cache-Control "public";
    }

    if (!-e $request_filename){
        rewrite "^/wp\-content/uploads/(.+)?" /assets/uploads/$1 permanent;
    }
    if (!-e $request_filename){
        rewrite ^/images/(.*)? /assets/images/$1 permanent;
    }
}
于 2013-06-13T02:09:17.920 回答