开启伪静态
必要工作
Xiuno BBS 4.x 需要编辑 conf/conf.php
编辑 'url_rewrite_on'=>1
清空 tmp 目录
Nginx
location ~* \.(htm)$ {
rewrite "^(.*)/(.+?).htm(.*?)$" $1/index.php?$2.htm$3 last;
}
Apache
<IfModule mod_rewrite.c>
RewriteEngine on
# Apache 2.4
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*?)([^/]*)$ $1index.php?$2 [QSA,PT,L]
# Apache other
#RewriteRule ^(.*?)([^/]*)\.htm(.*)$ $1/index.php?$2.htm$3 [L]
</IfModule>
IIS
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="xiuno">
<match url="^((.*)/)?(.+).html$" />
<action type="Rewrite" url="{R:1}\index.php?{R:2}.html" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
Caddy
www.yourdomain.com
# Set this path to your site's directory.
root * /var/www
file_server
# Or serve a PHP site through php-fpm:
php_fastcgi localhost:9000
SAE
在网站根目录建立config.yaml
文件,内容如下
appname: axiuno
version: 1
handle:
- rewrite: if ( !is_dir() && !is_file() && path ~ "admin/(.*.htm)" ) goto "admin/index.php?%1"
- rewrite: if ( !is_dir() && !is_file() && path ~ "[^/?].htm" ) goto "index.php?%1"
XiunoBBS白屏,500错误等问题
开启调试模式
修改网站根目录index.php
文件
// 0: Production mode; 1: Developer mode; 2: Plugin developement mode;
// 0: 线上模式; 1: 调试模式; 2: 插件开发模式;
!defined('DEBUG') AND define('DEBUG', 2);
开启调试模式或插件开发模式,可以查看网站的出错信息。
根据报错信息,禁用有问题的插件
一般开启调试模式后都能看到出错的代码行,想想你最近安装的插件,去后台挨个禁用,慢慢排查。排查完毕,将 DEBUG
改回 0
。
这里不得不说,大部分插件写的很一般。
备注
如果 DEBUG
为 2
的时候没有错误,改为 0
出错。则修改 xiunophp/xiunophp.min.php
文件第18行,将 error_reporting()
的参数中的 0
改为 E_ALL
error_reporting(DEBUG ? E_ALL : E_ALL);
清理缓存
进入后台清理缓存。不要以为直接删除tmp/*
就可以了,如果你使用了redis
和Memcached
,还得靠后台清理才能清干净。
加一个忘记管理员密码
修改网站根目录下面的index.php,将DEBUG改为3,就可以直接不需要密码进入管理员后台,然后进去以后找到用户列表修改密码,在把DEBUG改为0
//3为无密码直接进入后台,记得改完以后改回来,也就是改成0
!defined('DEBUG') AND define('DEBUG', 3);
一键清理后台未使用插件
写一个bash脚本,在插件目录运行
#!/bin/bash
mkdir 0
mdir=`pwd`/0
dirlist=`ls -d */`
for pdir in $dirlist
do
grep "installed\"\: 0" $pdir/conf.json > /dev/null
if [ $? -eq 0 ];then echo $pdir;mv $pdir $mdir/;fi
done
dirlist=`ls -d */`
for pdir in $dirlist
do
grep "enable\"\: 0" $pdir/conf.json > /dev/null
if [ $? -eq 0 ];then echo $pdir;mv $pdir $mdir/;fi
done
修改xiuno默认路由,让错误地址直接跳转404
使用xiuno搭建的论坛,在访问一个不存在的页面时,比如 ./test-1.htm
默认情况下,访问这个不存在的页面时,会自动跳转到首页,这会造成被恶意SEO
解决办法:
修改网站目录下的index.inc.php
,第71行、72行,改成下面的代码:
//include _include(APP_PATH.'route/index.php'); break;
http_404();
修改Xiuno的帖子时间显示格式,将XX天前改成具体的年月日时分秒
打开xiunophp/misc.func.php
,定位到第486行,找到如下代码:
if($seconds > 31536000) {
return date('Y-n-j', $timestamp);
}
修改为:
if($seconds > 259200 ) { return date('Y-m-d H:i:s', $timestamp); }
打开xiunophp/xiunophp.min.php
,定位到第56行,找到如下代码
if($seconds > 31536000) { return date('Y-n-j', $timestamp); }
修改为:
if($seconds > 259200 ) { return date('Y-m-d H:i:s', $timestamp); }
后台清理缓存.
XIUNOBBS后台插件排序
XIUNOBBS后台插件排序方法,启用的插件排在前面.
排序方法:打开文件/model/plugin.func.php
,找到第53行的plugin_init()
函数,在该函数尾部修改一下
原代码如下:
// 本地 + 线上数据
$plugins[$dir] = plugin_read_by_dir($dir);
}
}
}
修改为以下代码即可
// 本地 + 线上数据
$plugins[$dir] = plugin_read_by_dir($dir);
}
//插件排序
$plugins = plugin_list_sort($plugins, "installed");
$plugins = plugin_list_sort($plugins, "enable");
}
}
//二维数组排序 TRUE FALSE
function plugin_list_sort($arrlist, $col, $asc = FALSE){
$colarr = $arr = array();
foreach($arrlist as $k=>$v){
$colarr[$k] = $v[$col];
}
if($asc == TRUE){
asort($colarr);
}else{
arsort($colarr);
}
reset($colarr);
foreach($colarr as $k=>$v){
$arr[$k] = $arrlist[$k];
}
return $arr;
}
修复xn_tag插件排序问题
默认选择多个tag标签以后,出现的帖子顺序是从最古老的帖子开始排序的,这样非常不友好,如果你的站点数据多,哪筛选一下第一页全部是上古时期的主题.改改,让他从最新的主题开始排序
打开/plugin/xn_tag/hook/forum_thread_list_before.php
在95行左右找到如下:
$threadlist = thread_find_by_tids($tids);
替换成:
$threadlist = thread_find_by_tids($tids, array('tid' => 'DESC'));
然后再次筛选就会发现是从最新的主题开始了
xn_tag修改为单选
顺便记录一个,默认插件是可以让你选择多个标签的,如果你的站点需求,只让单选,可以做如下修改.打开/plugin/xn_tag/hook/post_js.htm
,把里面所有的内容替换为如下内容:
<script>
var forumlist = <?php echo xn_json_encode($forumlist_show); ? >;
// 初始化值,选中的值
var tagids = <?php echo xn_json_encode($tagids); ? >;
var action = '<?php echo $action;?>';
var jfid = $('select[name="fid"]');
var fid = <?php echo intval($fid); ? >||$('select[name="fid"]').val();
jfid.on('change',
function() {
var fid = jfid.val();
fid_on_change(fid);
});
function fid_on_change(fid) {
var s = '';
var forum = forumlist[fid];
$.each(forum.tagcatelist,
function(k, tagcate) {
s += '<select class="custom-select mr-1 mb-3 w-auto" name="tagid[]">';
s += '<option value=0>' + tagcate.name + '</option>';
$.each(tagcate.taglist,
function(k, tag) {
s += '<option value=' + tag.tagid + (xn.in_array(tag.tagid, tagids) || (tag.tagid == tagcate.defaulttagid && action == 'selected') ? ' selected': '') + '>' + tag.name + '</option>';
});
s += '</select>';
});
$('#nav_tag_list_div').html(s);
}
fid_on_change(fid);
$('#nav_tag_list_div').on('click', 'a.tag_option',
function() {
var jthis = $(this);
var tagid = jthis.attr('tagid');
jthis.toggleClass('active');
// 隐藏域
var v = jthis.hasClass('active') ? tagid: '';
jthis.next().attr('value', v);
});
// tag 选中区域。
</script>
页码翻页功能美化,免得手机上出现页码条过长
去掉上一页和下一页
开发模式改/xiunophp/misc.func.php
注释掉大约390行和396行的代码
$page != 1 && $s .= pagination_tpl(str_replace('{page}', $page-1, $url), '◀', '');
$page != $totalpage && $s .= pagination_tpl(str_replace('{page}', $page+1, $url), '▶');
我TM,奇怪了,怎么粘贴上来变成了emoji表情...
线上模式改/xiunophp/xiunophp.min.php
删除掉如下内容:
$page != 1 && $s .= pagination_tpl(str_replace('{page}', $page-1, $url), '◀', '');
$page != $totalpage && $s .= pagination_tpl(str_replace('{page}', $page+1, $url), '▶');
缩短页码显示数量
开发模式打开/xiunophp/misc.func.php
大约第378行找到$shownum = 5; // 显示多少个页 * 2
改为$shownum = 2;
线上模式打开/xiunophp/xiunophp.min.php
搜索$shownum = 5;
改为$shownum = 2;
意思是左右各几个页码,5就是10个,2就是4个
修改上传图片的质量
打开/view/js/xiuno.js
在大约1122行找到var qulity = options.qulity
修改后面的数字,1为位无损,小于1则压缩图片质量
游客登录提示
找到你正在使用的模板目录的thread.htm
文件,在合适位置加入如下内容:
比如我用的默认模板,就打开view/htm/thread.htm
在147行左右加入下面的代码.
<?php if(empty($uid)){?>
<div class="card text-center"><p></p><p class="text-center">
你可以在 <a href="<?php echo url("user-login");?>"><b>登录</b></a> or <a href="<?php echo url("user-create");?>"><b>注册</b></a> 后,对此帖发表评论!</p>
</div>
<?php }?>
解决透明背景PNG图片显示问题
默认上传透明背景的PNG图片会直接显示为黑色背景,解决方法如下:
1.打开view/js/xiuno.js
文件,在大约1121行找到如下内容进行替换,
替换前:
var thumb_height = options.height || 2400;
var action = options.action || 'thumb';
var filetype = options.filetype || xn.image_file_type(file_base64_data);//xn.base64_data_image_type(file_base64_data);
var qulity = options.qulity || 0.9; // 图片质量, 1 为无损
if(thumb_width < 1) return callback(-1, '缩略图宽度不能小于 1 / thumb image width length is less 1 pix');
替换后:
var thumb_height = options.height || 2400;
var action = options.action || 'thumb';
//var filetype = options.filetype || xn.image_file_type(file_base64_data);//xn.base64_data_image_type(file_base64_data);
var filetype = xn.image_file_type(file_base64_data);//xn.base64_data_image_type(file_base64_data);
var qulity = options.qulity || 0.9; // 图片质量, 1 为无损
if(thumb_width < 1) return callback(-1, '缩略图宽度不能小于 1 / thumb image width length is less 1 pix');
2.在1226行左右找到if(filetype == 'jpg') filetype = 'jpeg';
在下面增加一行if(filetype == 'png') filetype = 'png';
.具体如下:
//filetype = 'png';
if(filetype == 'jpg') filetype = 'jpeg';
if(filetype == 'png') filetype = 'png';
var s = canvas.toDataURL('image/'+filetype, qulity);
if(callback) callback(0, {width: width, height: height, data: s});
3.清空后台缓存,强制刷新浏览器看效果
修复git_tags插件开启伪静态以后报错问题.
找到/git_tags/view/js/tag.js
把63,88以及97行的?tag-xxx.htm
前面的问号去掉即可.或者你可以直接下载附件.
git_tags伪静态修复版
要是还不放心,自己对照着改吧
//自己在你的tag.js里面搜索下面这三个,去掉tag前面的问号.
...
var url = '?tag-del.htm'
...
var url = '?tag-add.htm'
...
a href="?tag-'+msg+'.htm"
...
帖子增强插件修[首页帖子列表显示板块2]功能为彩色标签
1.打开/plugin/haya_post_info/hook/thread_list_inc_username_before.htm
找到:
<a href="<?php echo url("forum-$_thread [fid]");?>" target="_blank" title="<?php echo $_thread ['forumname'];?>" class="badge small mr-2 haya-post-info-home-thread-forum-username-before">
替换为:
<a href="<?php echo url("forum-$_thread [fid]");?>" target="_blank" title="<?php echo $_thread ['forumname'];?>" class="badge
<?php if ($_thread ['fid'] == 1) { ?>
badge-primary
<?php } ?>
<?php if ($_thread ['fid'] == 2) { ?>
badge-secondary
<?php } ?>
<?php if ($_thread ['fid'] == 3) { ?>
badge-success
<?php } ?>
<?php if ($_thread ['fid'] == 4) { ?>
badge-info
<?php } ?>
<?php if ($_thread ['fid'] == 5) { ?>
badge-warning
<?php } ?>
<?php if ($_thread ['fid'] == 6) { ?>
badge-danger
<?php } ?>
<?php if ($_thread ['fid'] == 7) { ?>
badge-secondary
<?php } ?>
<?php if ($_thread ['fid'] == 8) { ?>
badge-dark
<?php } ?>
<?php if ($_thread ['fid'] == 9) { ?>
badge-primary
<?php } ?>
<?php if ($_thread ['fid'] == 10) { ?>
badge-warning
<?php } ?> small mr-2 haya-post-info-home-thread-forum-username-before">
2.后台帖子增强插件设置 - 首页帖子列表显示板块2 - 开启
举例:
比如红色就按照这样子格式:badge-danger
<?php if ($_thread ['fid'] == 5) { ?>
badge-danger
<?php } ?>
附上颜色对照表:
xiuno修改置顶的小图标
可能有人不太喜欢那个小旗帜图标,把置顶图标直接换成向上顶的箭头吧
css代码,放到:全局 : html > head (css)
<style>
[class^="icon-top-"]:before {
content: "\f0aa";}
</style>
XiunoBBS 官方搜索插件改进
简单的说就是让搜索支持组合搜索,比如你站点上有个标题叫我是你爹
的文章,搜索我
或者你爹
都可以收到,如果你搜索我+空格+你爹
中间多一个空格你会发现什么都没有.毕竟上古时期的玩意了,修复修复. 打开xn_search\route\search.php
,添加和修改以下代码
foreach($keyword_arr as $key => $cond_val){
$cond_sql .= ($range == 1?"subject":"message")." LIKE '%$cond_val%'";
if($key != count($keyword_arr) - 1)$cond_sql .= ' AND ';
}
主题URL字段自定义
打开index.inc.php
,找到如下:
case 'thread': include _include(APP_PATH.'route/thread.php'); break;
在下面添加一行.其中tiezi
就是你要自定义的url字段.不能改成已经存在的字段.
`case 'tiezi': include _include(APP_PATH.'route/thread.php'); break;`
完事以后修改一下所有你在用的模板和插件里面对应的.把thread
改成你要的.清理缓存,完事.
利用大白自定义插件实现站外链接跳转提示
代码放到自定义JS里面,作用于全局.
<script>!function() {
$("a").each(function() {
var url = $(this).attr('href');
if (url.length > 0 && url.indexOf('http') >= 0 && url.indexOf(window.location.host) < 0) {
// console.log(url);
$(this).click(function() {
$.confirm('即将离开网站,请注意您的帐号和财产安全。</br>' + $(this).attr('href') + '', function() {
window.open(url);
});
return false;
});
}
});}();</script>
非插件实现图片灯箱
适合有强迫症的人,不喜欢装太多插件的.
使用的JS就2KB大小,项目地址:https://tokinx.github.io/ViewImage/
在你要实现图片灯箱的页面加入下面的html即可,默认只需要加在主题页面
<script>
$(".message img").on("click",function (){
window.ViewImage && ViewImage.init('.message img');
});
</script>
<script src="//tokinx.github.io/ViewImage/view-image.min.js"></script>
或者使用大白自定义工具,添加到主题页的html或者js中
解决发帖时候出现xhr.responseText:, type:error
注释掉post.func.php
里的include xn_html_safe.func.php
即可,但是不建议这样,有安全风险
给帖子图片增加圆角和阴影特效的方法
打开/view/css/bootstrap-bbs.css
大概242行,找到
.message img {
...
}
替换为
.message img {
max-width: 100%;
height: auto !important;
border: 1px solid #dee2e6;
margin-bottom: 0.75rem;
margin-right: 0.5em;
border-radius:6px;
box-shadow: 6px 6px 12px 0px rgba(0,0,0,0.2),0px 0px 8px 0px rgba(0,0,0,0.19);
}