如何让WordPress自定义slug的permalink直接跳转至jpg图片?
WordPress实现自定义短链接指向媒体库图片的解决方案
默认WordPress的媒体附件slug对应的是附件详情页路径,而非直接指向资源文件,若固定链接规则未适配附件资源,就会出现短链访问404的问题,以下是两种可直接落地的实现方案:
方案一:添加代码实现自动适配(无需修改服务器配置)
该方案无需每次新增图片都调整服务器规则,直接在WordPress后台修改媒体slug即可生效:
- 打开站点当前使用主题的
functions.php文件(推荐使用子主题修改,避免主题更新后代码被覆盖) - 在文件末尾粘贴如下代码:
// 附件slug访问直接跳转至对应资源文件 add_action( 'template_redirect', function() { if ( is_attachment() ) { global $post; if ( $post && wp_get_attachment_url( $post->ID ) ) { wp_redirect( wp_get_attachment_url( $post->ID ), 301 ); exit; } } } );
- 保存文件后进入WordPress后台「设置」-「固定链接」页面,无需修改任何配置,直接点击「保存更改」刷新重写规则即可
配置完成后,你为媒体库图片设置的自定义slug对应的短链接www.example.com/[自定义slug]会自动301重定向到实际的图片资源地址,访问即可正常加载图片。
方案二:服务器重写规则实现(性能更优)
如果对外使用的图片数量固定,推荐用服务器重写规则实现,无需调用WordPress内核,响应速度更快:
Nginx 配置
- 编辑站点的Nginx配置文件,在server块内添加对应规则即可,示例如下:
rewrite ^/image1$ /wp-content/uploads/2021/08/v2_2.jpg permanent; rewrite ^/image2$ /wp-content/uploads/2021/09/banner.jpg permanent; # 可按需新增多条规则
- 保存配置后执行
nginx -s reload重启Nginx生效
Apache 配置
- 编辑站点根目录的
.htaccess文件,添加对应规则即可,示例如下:
Redirect 301 /image1 /wp-content/uploads/2021/08/v2_2.jpg Redirect 301 /image2 /wp-content/uploads/2021/09/banner.jpg # 可按需新增多条规则
- 保存文件后即可生效
注意事项:
- 两种方案均使用301永久重定向,修改配置后建议清理浏览器缓存和站点缓存后再测试,避免旧缓存导致访问异常
- 如果需要完全隐藏真实的图片路径,可在上述重定向逻辑基础上添加内部重写规则,不需要返回301状态码,用户侧不会感知到真实的资源路径
内容的提问来源于stack exchange,提问作者jbx
相关产品推荐
相关产品推荐

