我继承了WordPress项目,帖子中的所有媒体(图片)都是这样的:
http://example.com/image/news/name.jpg
即使网站的根目录设为http://example.com/news
和图像实际上保存在wp-content/uploads/2017...
现在我将此站点从共享主机移动到我自己的服务器,我试图通过nginx配置提供服务,如下所示:
location ^~ /news {
root /var/www/html/;
index index.php index.html index.htm;
try_files $uri $uri/ @wp;
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
fastcgi_param
SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
除了图片网址外,其他所有工作都有效。
为什么旧的URL看起来像他们一样?是什么改写了他们?
我如何使用nginx和/image
位置来修复此问题?
答案 0 :(得分:0)
您可以在nginx配置中使用别名:http://nginx.org/en/docs/http/ngx_http_core_module.html#alias
location /image/news/ {
alias /wp-content/uploads/2017/;
}
您可能需要根据文件夹的日期进行修改。
问题:
您是否在渲染页面(视图源)中观察了图像路径http://example.com/image/news/name.jpg
,或在后期编辑中观察了原始后端数据/文本模式。
如果它在原始数据中:
您提到的只是迁移网站,而不是给nginx额外的工作,所以为什么不在文本编辑器中打开SQL文件,然后查找并替换字符串路径并重新导入数据库。 (实际上,您应该导出当前数据,以便在您进行编辑时使用..保留副本作为备份)
以上是推荐的方法,因为您可能会在下一个可选方法中找到并替换您可能会遗漏的某些字段。
或者,您可以在posts表上运行SQL REPLACE命令。请先备份DATABASE。
这是在posts
表中替换的示例。相应地修改{..}
中的值。
UPDATE `{prefix}_posts` SET `post_content` = REPLACE( `post_content` , '{old-path}', '{new-path}' ) WHERE `post_content` LIKE '%{old-path}%'
...
但是,如果原始数据中的路径已经正确,并且只有渲染的HTML路径不同。
然后看起来插件或主题代码正在修改图像路径。
运行文件搜索字符串image/news/
并查看是否显示任何文件。还要在数据库sql文件中搜索这个。它可能会对正在发生的事情有所启发,然后您可以相应地修改这些值。