-
由于51la统计经常被挂马 我们更换了网址统计
开源的CMS程序,功能体验上和百度统计很相似,在数据上和百度统计没有太大的差别。 我们已开放访客权限,方便各位合作伙伴自行查看。 已关闭,我们已经使用了第三方数据统计。... -
网页 “悼念模式” 全站变灰/黑白色CSS代码
在国家公祭日、清明节、悼念先烈等等,可以让自己网站变成黑白色或者灰色,以表默哀或悼念。样式: html {-webkit-filter: grayscale(100%);}... -
使用CloudFlare Workers反代网站
使用 CloudFlare Workers 反代网站镜像整个网站 // 替换成你想镜像的站点 const upstream = 'www.google.com' // 如果那个站点有专门的移动适配站点,否则保持和上面一致 const upstream_mobile = 'www.google.com' // 你希望禁止哪些国家访问 const blocked_region = ['RU'] // 禁止自访问 const blocked_ip_address = ['0.0.0.0', '127.0.0.1'] // 替换成你想镜像的站点 const replace_dict = { '$upstream': '$custom_domain', '//www.google.com': '' } //以下内容都不用动 addEventListener('fetch', event => { event.respondWith(fetchAndApply(event.request)); }) async function fetchAndApply(request) { const region = request.headers.get('cf-ipcountry').toUpperCase(); const ip_address = request.headers.get('cf-connecting-ip'); const user_agent = request.headers.get('user-agent'); let response = null; let url = new URL(request.url); let url_host = url.host; if (url.protocol == 'http:') { url.protocol = 'https:' response = Response.redirect(url.href); return response; } if (await device_status(user_agent)) { upstream_domain = upstream } else { upstream_domain = upstream_mobile } url.host = upstream_domain; if (blocked_region.includes(region)) { response = new Response('Access denied: WorkersProxy is not available in your region yet.', { status: 403 }); } else if(blocked_ip_address.includes(ip_address)){ response = new Response('Access denied: Your IP address is blocked by WorkersProxy.', { status: 403 }); } else{ let method = request.method; let request_headers = request.headers; let new_request_headers = new Headers(request_headers); new_request_headers.set('Host', upstream_domain); new_request_headers.set('Referer', url.href); let original_response = await fetch(url.href, { method: method, headers: new_request_headers }) let original_response_clone = original_response.clone(); let original_text = null; let response_headers = original_response.headers; let new_response_headers = new Headers(response_headers); let status = original_response.status; new_response_headers.set('access-control-allow-origin', '*'); new_response_headers.set('access-control-allow-credentials',…... -
多个wordpress共享同一用户数据库
思路1. 两个 wordpress 站共享用户数据,其他(文章、主题、设置等)数据不共享。 2. 共享 cookie,即登录 A 站后切换为 B 站后仍为登录状态。 教程前提:A、B 两站为同顶级域名(a.abc.com 与 b.abc.com)或同根目录(abc.com/a 与 abc.com/b) A 为主站,B 共享 A 的用户数据,新建 B,安装时数据库选择和 A 同一数据库下,A 的数据库表头为 wp_,B 的改为和 A 的不一样,如:wp2_,安装 B 站时管理员任意填写,反正用不到(B 站的管理员账户从 A 站)。 打开 B 站的 wp-config.php 文件,添加: define('CUSTOM_USER_TABLE ',' wp_users'); define('CUSTOM_USER_META_TABLE ',' wp_usermeta '); 这时候,用 A 的用户数据去登录 B,可以登录但无后台权限。 然后在 A 的 functions.php 添加: add_action( 'user_register', 'dup_capabilities' ); add_action('profile_update', 'dup_capabilities'); Function dup_capabilities( $user_id ){ //在这里设置数据表前缀,所有站的数据库表前缀全部写上即可。 $prefixs = array('wp_','wp2_'); Global $table_prefix; $cap_val = get_user_meta( $user_id, $table_prefix.'capabilities',true); If( !Empty( $cap_val ) ) { Foreach( $prefixs as $prefix ){ if( $prefix != $table_prefix ) update_user_meta( $user_id, $prefix.'capabilities', $cap_val ); } } } 然后回头管理员身份登录 A 站,后台用户编辑功能里把每个用户重新编辑一下,不修改任何信息即可。编辑过后,就可以用 A 站的账户登录 B 站了。 所以如果要做类似数据共享的站,最好是在一开始主站用户数量很少的时候就开始操作,不然一个个用户编辑下去也很麻烦。 A 作为主站,操作用户数据或注册新用户就在 A 站上操作,然后同步给 B。 <span style="color: #ff0000;">(以下没测试,请自行测试:</span> <span style="color: #ff0000;">如果在B站上注册新用户是否能同步给A,可以在B的functions.php里也添加以上代码)</span> 这时候 A 站 B 站不同 cookie,无法免登录自由切换,接下来实现同步 cookie。 打开 A 站的 wp-config.php 文件,复制身份认证密钥,共 8 行。 把 B 站的身份认证密钥替换为 A 的,保证 A、B 一模一样。 在 A、B 两站的 wp-config.php 文件里同时添加: define('COOKIEPATH ','/'); define('COOKIE_DOMAIN', '这里填写A、B两站的顶级域名'); define('SECRET_SALT', '这里任意自定义一串字符串或密码'); define('ADMIN_COOKIE_PATH ','/'); define('SITECOOKIEPATH ','/'); define('COOKIEHASH', md5('这里任意自定义一串字符串或密码'));... -
WordPress文章发布后自动同步,无需插件API
WordPress 文章发布后自动同步文章到其他 wordpress 博客,无需插件 API前些日子在贴吧看到一位小伙伴需要这个功能,现在将我的实现方法分享给大家。WordPress 文章发布后同步文章到其他 wordpress 博客教程思路是:在另一个 WordPress 站点创建一个 API,文章发布时用 cURL 模拟 POST 请求 API 利用 wp_insert_post () 函数来创建文章。支持同步文章标题、内容、类型、分类、标签,分类需要另一个站点也有创建相同名称的分类,别名和 ID 不需要相同。实现:在博客站点的根目录创建一个文件,命名为 xxxxxxxx-post.php,代码如下:并设置用于启动 API 的 key <?php /* 文章发表后同步到另一个站点(接收) */ define('WP_USE_THEMES ', false); require_once("wp-load.php"); $key='xxxxxxxxxx'; //设置API的密钥,建议设置复杂 if($_POST['key']==$key){ $categorys=explode(',',$_POST['category']); $category=array(); for($x=1;$x<count($categorys);$x++) { $category[$x-1]=get_cat_ID($categorys[$x]); } $info = array( 'post_title' => $_POST['title'], 'post_content' => $_POST['content'], 'post_status' => 'publish', 'post_author' => 1, //发布文章的作者ID,1 为管理员 'post_date' => $_POST['date'], 'tags_input' => $_POST['tags'], 'post_category' => $category, 'post_type' => $_POST['type'] ); wp_insert_post( $info ); } ?> 在主博客主题的 functions.php 文件的最后一个?> 前加入已下代码,并设置 key,修改 API 地址: /* 文章发表后同步到另一个站点(发送) */ add_action('publish_post', 'E_sync_post'); //钩子,在文章发布时执行 Function E_sync_post($post_ID) { $key='xxxxxxxxxxxxx'; //输入你设置的密钥 $url='http://xxxxxx/xxxxxxxxxxxx-post.php';//API地址(接受同步文章博客地址,例:xx表示为发布文章主博客,那填写API地址就是负博客地址) $post_info = get_post($post_ID); If ( $post_info->post_status == 'publish' && $_POST['original_post_status'] != 'publish' ) { $title=$_POST['post_title']; $content=$_POST['content']; $date=$_POST['aa'].'-'.$_POST['mm'].'-'.$_POST['jj'].' '.$_POST['hh'].':'.$_POST['mn'].':'.$_POST['ss']; $category=''; for($x=1;$x<count($_POST['post_category']);$x++) { $category.=','.get_cat_name($_POST['post_category'][$x]); } $type=$_POST['post_type']; $tags=str_replace('、',',',$_POST['tax_input']['post_tag']); if($_POST['newtag']['post_tag']){ $tags.=','.str_replace('、',',',$_POST['newtag']['post_tag']); } $data = 'key='.$key.'&title='.$title.'&content='.$content.'&date='.$date.'&category='.$category.'&type='.$type.'&tags='.$tags; $ch = curl_init (); //cURL模拟POST curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, TRUE ); curl_setopt ( $ch, CURLOPT_POST, TRUE ); curl_setopt ( $ch, CURLOPT_POSTFIELDS, $data ); curl_setopt ( $ch, CURLOPT_URL, $url ); curl_setopt ( $ch, CURLOPT_SSL_VERIFYPEER, FALSE); $ret = curl_exec ( $ch ); curl_close ( $ch ); Return $ret; } } 这样一来,在主站发表一篇文章后,镜像站点也就会发表出来一篇文章了,但也会有一些意外情况,比如不是马上发表出来,而是显示计划中,正常隔几分钟后会发表好,但也会有发表失败,需要在后台文章管理中,选择该发表失败文章,状态修改为已发布,更新即可。一些意外情况的解决: 问题 1,由于主题升级后,functions.php 代码会被置换。用以上方法实现的内容镜像每次在主题升级后都需要修改 functions.php 代码,这会造成麻烦。 所以有如下解决办法,代码如下: <?php //文章推送 add_action('publish_post', 'fanly_sync_post'); //钩子,在文章发布时执行 Function fanly_sync_post($post_ID) { $key='123456'; //输入你设置的密钥 $url='http://6.3838521.com/post.php';//API 地址,就是接受数据的那个站点 $post_info = get_post($post_ID); If (…... -
在一个网站上同时使用两个CDN服务,针对不同地域访问
对于同时提供中英文服务的网站来说,如何提高国内访问速度和国外访问速度显得非常重要。这这里以腾讯 CDN 和 cloudflare 来说明。腾讯的对象存储是面向非结构化数据,支持 HTTP/HTTPS 协议访问的分布式存储服务,它能容纳海量数据并保证用户对带宽和容量扩充无感知,可以作为我们网站的静态文件存储地。当我们在https://cloud.tencent.com/product/cos申请免费的 cos 空间后,同时就可以免费开通 cdn 服务,同时获赠免费的 50G cdn 流量,然后只需要添加备案后的网站就可以了。cloudflare 是世界上最大的免费 CDN 提供商,同时提供了免费的 https 服务,提供无限 DDOS 等各种防护等等好处,谁用谁知道。CF(cloudflare)对于国外的网站来说是非常完美的,但是国内的话免费方案速度不是很快,被很多人誉为减速 CDN,那么我们可不可以在国内使用免费的腾讯 CDN,同时对于国外用户使用 CF 的免费 CDN 服务呢?答案是肯定的。 目前同时使用国内 CDN 和 CF 有两种方案,这种方案的核心是使用阿里云的智能云解析,我这里是阿里云域名服务器 dns3.hichina.com,dns4.hichina.com,智能云解析允许针对不同的 ip 来源匹配不同的服务地址,可以指定不同 NS 服务器,不同 ip,不同 cname,真的是太棒了。所以要同时使用国内 CDN 和 CF CDN 的话需要使用阿里云注册域名(没有试过在国外注册转移到阿里云域名控制台)。 由于国内网站服务必须备案,因此网站域名必须备案,不然的话国内的 CDN 上面是无法添加的。下面正式介绍如何同时使用国内 CDN 和 CF cdn 来提高网站的访问速度,保护网站吧。 方案 1:国内 IP cname 解析到腾讯 CDN 上,国外 IP 使用 CF 的 ns 服务器第一步:ns 服务器更改为 CF 的 ns 服务器。 如上图,在阿里云控制台找到域名,选择要修改的域名,我这里是 bobobk.com,下拉列表中找到 DNS 修改,确认后会有手机验证,验证通过后就修改好了。然后在 cloudflare 上面添加自己要使用双 CDN 的网站,然后 cf 会确认 ns 设置是否正确,正确后就可以在 DNS 上面设置好解析了(如果原来有解析的话直接在 cf 上设置就好了,上面会显示历史解析地址),这里当然要记得确认 status 显示是橙色的,说明启用了 CDN,不然就直接暴露源站了,当然 CF 默认是使用的。 第二步:ns 服务器更改为阿里云的 ns 服务器(dns3.hichina.com,dns4.hichina.com)。修改方法同上。关键部分来了,在域名控制台点击 bobobk.com 右边的解析,进入到如下界面: 这里我们需要设置境外 ns 记录值为 CF 的服务器地址,cname 设置为腾讯云 cdn 的 cname 地址,这样国内 IP 访问就是通过腾讯 CDN,而国外 ip 访问就是 CF 的全球加速节点。 看下设置好国内国外 CDN 后的速度: 可以看到无论是国内还是国外速度都是非常的快,到此第一种方法介绍结束。 方案 2:国内 IP cname 解析到腾讯 CDN 上,国外 IP cname 解析到 cloudflare CDN 上第一步:成为 cloudflare parter 这种方法需要能够获得 cloudflare 的 cname 解析方式,对于个人来说就是需要申请个 cloudflare 的合作伙伴的方式才能够获得的。进入到 cf 合作伙伴申请页面 https://www.cloudflare.com/partners/ ,然后 google 一下或者百度一下就可以看到大量的相关教程了,这里就不详细介绍了。 第二步:根据 ip 设置不同的 cname 记录 在以 CF 合作者身份申请到 cname 之后,同样进入到智能云解析设置: 设置好国外的 cname 解析为 CF 的 cname,默认为腾讯的 CDN,到此大功告成了。 本教程在于如何同时使用国内 CDN 和国外 CLOUDFLARE cdn 来进行全球加速,目前本人使用的是第一种加速方式,目前也在申请 cloudflare 的合作者身份,后续如果有想要使用 CF cname 解析的我也可以给你们设置。教程来源:https://blog.csdn.net/ztb8541/article/details/84536062... -
WordPress给网站右键添加自定义的按钮美化
要给 WordPress 网站右键添加自定义按钮实现美化,可以按照以下步骤进行操作: 在 WordPress 后台添加功能代码:将以下代码添加到主题的 functions.php 文件中,这将在前端页面的 标签之间添加一段 JavaScript 代码。 function custom_right_click_menu() { ?> <script type="text/javascript"> (function($) { $(document).ready(function() { $('body').on('contextmenu', function() { var top = event.pageY + 'px'; var left = event.pageX + 'px'; $('<div>').attr({ id: 'my-custom-menu', }).css({ display: 'none', position: 'fixed', top: top, left: left, border: '1px solid #ccc', background: '#fff', padding: '8px', 'z-index': '9999' }).html('<ul><li><a href="#">自定义按钮1</a></li><li><a href="#">自定义按钮2</a></li></ul>').appendTo('body').fadeIn(200); return false; }); $('body').click(function() { $('#my-custom-menu').fadeOut(200, function() { $(this).remove(); }); }); }); })(jQuery); </script> <?php } add_action('wp_head', 'custom_right_click_menu'); 修改自定义按钮:将上述代码中的自定义按钮名称和链接修改为你需要的名称和链接。你可以根据需求添加更多的按钮。设计菜单样式:根据需求,将自定义按钮菜单样式进行修改。保存并应用:最后,在 WordPress 后台将修改后的主题文件保存并应用即可。通过以上步骤,就可以为 WordPress 网站添加自定义按钮实现美化。... -
如何防止别人镜像WordPress站点,同时也要阻止Nginx反向代理自己的网站
确保你和你的网站管理员采取以下预防措施: 配置 HTTPS:使用 HTTPS 可以帮助防止别人在传输过程中拦截你的数据。同时也建议启用 HSTS。设置正确的权限:确保你的网站目录不允许其他用户访问,并限制文件的权限。安装防火墙或安全插件:使用防火墙或安全插件可以防止恶意的 IP 地址或请求,并自动屏蔽或拦截它们。禁用目录浏览:确保在你的服务器或 WordPress 设置中禁用目录浏览功能。常规更新:确保 WordPress 及其插件 / 主题及时更新,以避免利用已知漏洞进行攻击。检查日志:定期检查日志以查找可疑的访问和行为。如果你决定禁用 Nginx 反向代理的话,可以在 Nginx 配置中添加以下代码: location / { proxy_pass http://your_wordpress_site_url; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } 在你的 WordPress 配置中,添加以下代码: if ( $_SERVER['HTTP_X_REAL_IP'] == 'the_Nginx_server_IP' ) { exit; } 这段代码将检查 HTTP 头中的 X-Real-IP 值是否等于 Nginx 服务器的 IP 地址,如果是则退出程序,从而防止 Nginx 反向代理。... -
7b2主题后台发帖下载设置默认开启下载功能和游客购买
使用 7b2 主题的用户每次发帖都会手动开启下载和游客购买功能,现在教大家默认开启。找到主题 b2/Modules/Settings/post.php 大概 583 行前后,如有改动的根据图片找: 修改后后台演示:... -
使用 Bootstrap 4 样式库和单独的 CSS 文件来创建菜单栏
有些 typecho 没有菜单栏,这是一个简易的菜单栏目教程:以下 html 代码,找个位置插入,然后写个 CSS 就完事了。 <nav class="navbar navbar-expand-lg navbar-dark bg-dark"> <a class="navbar-brand" href="//cansnow.cn">首页</a> <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="navbarNav"> <ul class="navbar-nav"> <li class="nav-item active"> <a class="nav-link" href="/ai.html">AI画廊</a> </li> <li class="nav-item"> <a class="nav-link" href="/category/natural-scenery/">风光相册</a> </li> <li class="nav-item"> <a class="nav-link" href="#">关于我</a> </li> </ul> </div> </nav> CSS: /* 在这里编写您自己的 CSS 样式 */ .navbar-brand { font-size: 1.5rem; font-weight: bold; margin: 0 2rem; } .navbar-nav .nav-link { font-size: 1.2rem; margin-right: 1rem; } .navbar-nav .nav-item.active .nav-link { color: #fff; /* 高亮显示导航栏项 */ } .navbar-toggler { border: none; } .navbar-toggler-icon { background-color: #fff; /* 菜单 */ } CSS2: /* 在这里编写您自己的 CSS 样式 */ .navbar-nav .nav-item .nav-link.active { color: #fff; background-color: #d89910; /* 设置活动菜单项的背景色和文本颜色 */ justify-content: center; margin: 0; padding: 0; list-style: none; text-align: center; /* 文字居中 */ } 我们将代码分为两部分:导航栏 HTML 代码和单独的 CSS 文件。导航栏 HTML 代码是与之前相同的。在单独的 CSS 文件中,可编写您自己的样式。请注意,如果您使用一个单独的 CSS 文件而没有使用样式库,需要确保将 Bootstrap 的 CSS 和 JS 文件正确引用到您的 HTML 页面中。在 HTML 页面 head 标签中加入以下代码即可引用 Bootstrap 文件和独立的 CSS 文件: 在这个例子中,我们引用了 Bootstrap 的 CSS 和 JS 文件,还引用了名为 mystyle.css 的自定义样式文件。请注意,Bootstrap 的 JS 文件需要在页面底部加载,以确保所有的 DOM 元素加载完毕时才会启动。这样,在单独的 CSS 文件中,就可以编写更具体化的样式,以实现您的自定义效果。网址自己修改一下吧。 2023 年 6 月份更新 页面滚动后,导航栏无法固定,这样滚动了 N 久再切换分类的时候很麻烦。使导航条固定在页面的顶部,并随着浏览器滚动而变动,在导航条的外层包裹一个固定位置的容器。以下是修改后的代码: <div class="fixed-top"> <nav class="navbar navbar-expand-lg navbar-dark bg-dark"> <a class="navbar-brand" href="//www.cansnow.cn">首页</a> <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false"…...






