使用wordpress建立文件共享站

使用wordpress建立文件共享站

原因

开设网站,最讨厌的事情就是网站的图片等静态资源被其他网站盗用。最简单的办法就是使用防盗链。由于我的网站从一开始是使用EasyPanel面板的虚拟主机建设的,所以没想过那么多,导致网站上图片的url和实际访问的url是同样的域名,使用防盗链白名单的话(并且不允许空Referer来源的话),所有访客就不要想登录了。

突然想到萌娘百科上传文件的时候,需要到名为萌娘共享的站点上传文件,才可以在百科的条目中插入图片,于是决定也建立一个用于存放静态文件(比如图片)的文件共享站点。

萌娘共享网站的说明

选择

选择新建wordpress网站作为文件共享站点是出于以下考虑:

  1. 我的博客站点就是wordpress,修改图片链接方便
  2. wordpress有现成的导入和导出插件(准确说是导入有个插件),这样方便传输原有数据。如果后期不想使用共享站了,数据迁移回原站也方便。
  3. 如果后续迁移回主站,(或者落魄了用Linux类型的“虚拟主机”),只要将资源共享的域名301到主域名,或者直接绑在和主站同样的路径下,文件依然能被访问。

如果是一个新建站点,在不缺钱的情况下,我个人建议使用腾讯或者阿里的对象存储(cos/oss),这些大厂的对象存储都有三方wordpress插件直接对接,将上传的图片自动更新到对象存储中,并且使用cdn分发。

在wordpress插件商城中搜索“对象存储”的结果

如果是使用腾讯云的wordpress应用镜像,腾讯甚至集成了官方的插件(他真的,我哭死.jpg)(腾讯云官方插件:对象存储 将 WordPress 远程附件存储到 COS-最佳实践-文档中心-腾讯云 (tencent.com)

腾讯云官方wordpress插件

当然,现在也有很多开源的图片管理工具,可以去搜索一下。

安装

注意:这里我使用的wordpress版本是6.4.3

安装wordpress,这就不多说了,我选择是从官网下载安装包,然后解压,之后正常安装wordpress。

在填写数据库的地方,数据库库名和原站同数据库,但是表前缀和原站数据库不同。wordpress默认的表前缀是wp_只要改成和原站不同的即可。

当然,如果做两个站点分开使用,其实正常安装就可以,不用这样麻烦。

同步数据库

现在,wordpress安装好了。原则上可以当作一个简单的资源站使用了。但是我希望两个站点可以使用同样的账户登录,所以需要修改wordpress的配置(这也就是为什么我要把两个wordpress安装在同一个数据库里面的原因)。

初始安装完成wordpress,会出现11张表:

  • commentmeta : 存放评论附加数据
  • comments : 存放博客文章和其他内容的评论
  • links : 存放链接数据
  • options : 存放网站的全局选项(比如说网站首页url)、插件和主题的信息
  • postmeta : 存放文章、页面、媒体文件等Post类型的附加数据
  • posts : 存放所有的文章、页面等Post数据
  • terms : 存放所有的分类信息
  • term_relationships :存放页面等文件和分类之间的关系
  • term_taxonomy : 存放分类的具体类型和其附加信息
  • usermeta : 存放用户账户的所有数据
  • users : 存放所有用户账户的信息

由于数据库涉及敏感信息,下面我就不放图片了,举个例子:假设原来的站点的表前缀是:example1_,新建的文件站的表前缀是:example2_,想要新站点使用原站点的用户数据,即要修改新站点的wordpress配置文件。

已经安装好的wordpress的配置文件是网站根目录下的:wp-config.php文件,在其中添加上:

define('CUSTOM_USER_TABLE', 'example1_users');
define('CUSTOM_USER_META_TABLE', 'example1_usermeta');

这时候,已经可以使用原站点的账号密码登录新站点了,但是没有权限登录新站点的后台。

然后修改一下表example1_usermeta,为这个表格添加一行数据:

INSERT INTO `test`.`example1_usermeta` (`umeta_id`, `user_id`, `meta_key`, `meta_value`) VALUES (NULL, '1', 'example2_capabilities', 'a:1:{s:13:"administrator";s:1:"1";}');

因为我的网站只有我自己使用,只有一个用户,所以用户id是1。如果不是,则需要输入对应的用户id(user_id)和权限(meta_value)。用户id可以到原站查找,权限可以去新站点对应的表找。

这样,两个站点的用户数据就同步了。

导入数据

因为是文件站,存放的是原网站的媒体文件,所以在原网站的:工具 - 导出 中选择媒体,选择导出数据的时间。

在新网站的:工具 - 导入 中,选择wordpress,初次使用可能需要安装一下

记得勾选下载文件哦。

这样,数据就导入成功了。

建议安装的插件

因为是文件站点,主要的文件大多数还是图片,加上中文语言环境下容易出现奇怪的错误,所以可以安装两个方向的插件:文件名称自动转英文插件和图片优化插件。

我选择的插件如下:

删除不必要的菜单

由于是文件站,所以我优化了一下菜单栏的显示,隐藏了不必要的入口,效果如下:

如果想要实现,可以在使用主题的function.php加上如下内容:

function disable_media_libraryn() {
        remove_menu_page('edit.php'); 
        remove_menu_page('edit.php?post_type=page'); 
        remove_menu_page('edit-comments.php');
        remove_menu_page('users.php');
        remove_menu_page('themes.php');
        remove_menu_page('tools.php');
        remove_menu_page('options-general.php');
        remove_menu_page('plugins.php');
        remove_menu_page('index.php');
}

当然,在原网站我也移除了媒体库:

function disable_media_library_uploads() {
    remove_menu_page( 'upload.php' );
    global $pagenow;
    if ( 'post-new.php' === $pagenow || 'post.php' === $pagenow ) {
        remove_action( 'media_buttons', 'media_buttons' );
    }
}

考虑到后续会使用防盗链,所以我也做了提示(因为我会打开不允许空Referer来源,所以一定要有Referer):

function show() {
    ?>
    <div class="notice notice-warning">
        <p><?php _e('上传媒体附件到文件共享站:xxxxx <a href="url" target="_blank">【上传文件】</a> 直接打开无效,必须点击链接,账号密码和本站点通用。', 'textdomain'); ?></p>
    </div>
<?php
}

由于是编辑主题的function.php,所以主题更新的时候会修改,可以使用子主题,也可以关闭自动更新然后手动更新。

同步会话

我希望在博客站点登录之后,文件站也会自动登录。没有选择sso,选择共享cookies。

首先在wordpress的配置文件中(wp-config.php)往下翻有一段“乱码”,这是wordpress的验证密钥。

中文版的验证密钥注释如下:

 * 身份认证密钥与盐。
 *
 * 修改为任意独一无二的字串!
 * 或者直接访问{@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org密钥生成服务}
 * 任何修改都会导致所有cookies失效,所有用户将必须重新登录。
 *
 * @since 2.6.0
 */

将原站点和新站点的身份密钥统一(复制任意一边的就行),然后添加如下内容:(两个站点都要加)

define('COOKIEPATH',       '/');
define('COOKIE_DOMAIN',    'example.com');
define('SECRET_SALT',      '00001111-22223333-44445555-66667777');
define('ADMIN_COOKIE_PATH','/');
define('SITECOOKIEPATH',   '/');
define('COOKIEHASH', md5(  '00001111-22223333-44445555-66667777'));

最后大致是这样的效果:

更多

基本上就完成了,之后可以配置cdn,视情况配置cdn(如果开白名单模式,不要忘记把文件站点的域名也添加上白名单。)

文章「使用wordpress建立文件共享站」,由本站用户「Admin」发布。文章仅代表Admin观点,不代表本站立场。
页面网页地址「https://xiaozhiyuqwq.top/p/1174」。
如您对文章及其附件提出版权主张,或进行引用转载等,请查看我们的【版权声明】
无评论:-)

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇