Nginx 服务器 WordPress 多站点伪静态后,站点根目录下图片文件夹内的图片无法显示

Nginx 服务器 WordPress 多站点伪静态后,站点根目录下图片文件夹内的图片无法显示

因为 DedeCMS 收费的原因,通过“我爱水煮鱼”博客分享的 “DedeCMS 自动迁移到 WordPress 插件”,将原来的网站迁移到了 WordPress 上,这样就完美的实现了文章 ID 及 URL 不变的无缝迁移。但是实际访问过程中发现文章中的图片都无法显示了。

首先想到的是将原来 DedeCMS 网站的 uploads 文件夹,复制过来放到 WordPress 网站根目录下。

但是再次访问仍然无法显示图片,这时图片已经都复制过来并且路径正确了。

经过仔细排查,原来是 出了问题。

rewrite ^/([_0-9a-zA-Z-]+/)?wp-admin$ /$1wp-admin/ permanent;
rewrite ^/([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) /$2 last;
rewrite ^/([_0-9a-zA-Z-]+/)?(.*.php)$ /$2 last;
rewrite /. /index.php last;

上面的伪静态规则,最后一条,会匹配到所有根目录下的路径并且重写到 index.php 后面,这样就造成了 /uploads/* 被重写到了 index.php/uploads/*,路径就错了,当然无法显示图片。

知道问题解决起来就简单了,Nginx 提供了 -e 来判断是否是真实存在文件或目录以及 break 语句来终止匹配,在伪静态规则中最后一行前加入下面红色代码即可。

rewrite ^/([_0-9a-zA-Z-]+/)?wp-admin$ /$1wp-admin/ permanent;
rewrite ^/([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) /$2 last;
rewrite ^/([_0-9a-zA-Z-]+/)?(.*.php)$ /$2 last;
if (-e $request_filename){ break; }
rewrite /. /index.php last;
Nginx 服务器 WordPress 多站点伪静态后,站点根目录下图片文件夹内的图片无法显示

相关文章:

你感兴趣的文章:

标签云: