What & How & Why

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录前一修订版
后一修订版
前一修订版
other:website:misc [2022/06/24 11:48] – 创建 codinghareother:website:misc [2024/02/04 16:17] (当前版本) – [Disqus loading on scroll] codinghare
行 1: 行 1:
-======常见运维问题===== +======常见运维问题===== 
-一些个人网站环境配置及常见问题记录。+一些个人网站环境配置及常见问题记录。
 ---- ----
  
 ====AMH==== ====AMH====
-References:  +References:  
-  * [[https://amh.sh|AMH官方网站]] +  * [[https://amh.sh|AMH官方网站]] 
-===AMH æŸ¥çœ‹é»˜è®¤å¯†ç === +===AMH 查看默认密码=== 
-使用以下命令则可以查看:+使用以下命令则可以查看:
 <code bash> <code bash>
 cat /root/amh.log cat /root/amh.log
 </code> </code>
  
-===MySQL无法自动启动===+===MySQL无法自动启动===
  
-MYSQL åœ¨é‡å¯æœåŠ¡å™¨æ—¶ä¸èƒ½å¯åŠ¨ï¼Œå°è¯•ä»¥ä¸‹æ–¹æ³•ï¼š+MYSQL 在重启服务器时不能启动,尝试以下方法:
 \\ \\
 \\ \\
-删除 ''my.inf''。+删除 ''my.inf''
  
 <code bash> <code bash>
 cd /etc/ cd /etc/
 rm my.inf rm my.inf
 +</code>
 +==PID file not found==
 +<code bash>
 +#error msg
 +ERROR! MySQL server PID file could not be found!
 +</code>
 +这种情况多半是硬盘空间满了导致系统强制结束了 mysql 的进程。用下面的命令之后再重启一下 mysql 进系统看看。
 +<code bash>
 +rm -f /tmp/mysql-5.6.sock tmp/mysql-5.6.sock.lock
 </code> </code>
  
-===SSL é…ç½®=== +===SSL 配置=== 
-==SSL多虚拟主机== +==SSL多虚拟主机== 
-单IP的多个虚拟主机只需要一个 SSL证书即可。配置步骤: +单IP的多个虚拟主机只需要一个 SSL证书即可。配置步骤: 
-  - åœ¨ ''amh.sh/ssl.htm'' ä¸Šç”³è¯·è¯ä¹¦ï¼Œç”³è¯·çš„时候将所有虚拟主机的域名输入。 +  - 在 ''amh.sh/ssl.htm'' 上申请证书,申请的时候将所有虚拟主机的域名输入。 
-  - å°†å¾—到的证书在 ''amhssl'' ä¸­æ·»åŠ ã€‚ +  - 将得到的证书在 ''amhssl'' 中添加。 
-  - åˆ¶å®šè‡ªåŠ¨æ›´æ–°çš„策略。+  - 制定自动更新的策略。
 ====Dokuwiki==== ====Dokuwiki====
-Rreferences:+Rreferences:
   * [[https://www.nginx.com/resources/wiki/start/topics/recipes/dokuwiki/|Nginx Official guide for Dokuwiki]]   * [[https://www.nginx.com/resources/wiki/start/topics/recipes/dokuwiki/|Nginx Official guide for Dokuwiki]]
  
-===Dokuwiki Nginx Rewrite è§„则===+===Dokuwiki Nginx Rewrite 规则===
  
-将下列规则添加到 AMH çš„ ''rewrite'' æ¨¡å—中:+将下列规则添加到 AMH 的 ''rewrite'' 模块中:
  
 <code nginx> <code nginx>
行 62: 行 71:
     }     }
 </code> </code>
-==Dokuwiki é‡å†™åŽå›¾ç‰‡æ˜¾ç¤ºä¸æ­£å¸¸(Nginx&AMH)== +==Dokuwiki 重写后图片显示不正常(Nginx&AMH)== 
-Dokuwiki URL Rewrite ä¸Žä»¥ä¸‹ä»£ç å†²çªï¼š+Dokuwiki URL Rewrite 与以下代码冲突:
 <code nginx> <code nginx>
 location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp3|wma)$ { location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp3|wma)$ {
行 69: 行 78:
 } }
 </code> </code>
-而 AMH çš„ ''nginx.conf'' éœ€è¦åˆ°æ‰€å»ºç«‹çš„环境下的 ''vhost'' ç›®å½•ä¸‹æ‰¾å¯¹åº”虚拟主机的文件(一般是以 ''域名.conf'' æ ¼å¼çš„ ''conf'' æ–‡ä»¶ï¼‰ã€‚找到以后然后将里面的该段代码注释掉。如果用了 Https, åˆ™åŒæ—¶éœ€è¦æ³¨é‡ŠæŽ‰ HTTPS ç‰ˆæœ¬çš„ ''conf'' æ–‡ä»¶ã€‚+而 AMH 的 ''nginx.conf'' 需要到所建立的环境下的 ''vhost'' 目录下找对应虚拟主机的文件(一般是以 ''域名.conf'' 格式的 ''conf'' 文件)。找到以后然后将里面的该段代码注释掉。如果用了 Https, 则同时需要注释掉 HTTPS 版本的 ''conf'' 文件。
  
-===Dokuwiki Nginx å®‰å…¨è§„则===+===Dokuwiki Nginx 安全规则===
  
-该段代码用于防止除 ''conf'' å’Œ ''data'' ä»¥å¤–的重要文件本下载。+该段代码用于防止除 ''conf'' 和 ''data'' 以外的重要文件本下载。
 \\ \\
-使用:添加以下代码到 ''rewrite'' æ¨¡å—中:+使用:添加以下代码到 ''rewrite'' 模块中:
 <code nginx> <code nginx>
 # Block access to data folders # Block access to data folders
行 86: 行 95:
 } }
 </code> </code>
 +===所有 MIMe 类型===
 +[[https://gist.github.com/AlekseiCherkes/690551fafa3a939c54ed|Link]]
 +===Dokuwiki 使用===
  
-===Dokuwiki 使用===+  * 插件的安装:直接到后台的插件管理器中寻找指定的插件下载安装即可。
  
-  * 插件的安装:直接到后台的插件管理器中寻找指定的插件下载安装即可。+==常用插件==
  
-==常用插件== +  * Add New Page:可以直接在没有创建页面的位置直接创建页面,非常方便。 
- +  * Code Prettifier:非常好用的代码高亮。 
-  * Add New Page:可以直接在没有创建页面的位置直接创建页面,非常方便。 +  * Edittable :图形化界面的表格创建,比较方便,但有自适应问题。 
-  * Code Prettifier:非常好用的代码高亮。 +  * Fastwiki :优化 Dokuwiki 的访问速度(预加载)。 
-  * Edittable ï¼šå›¾å½¢åŒ–界面的表格创建,比较方便,但有自适应问题。 +  * Google Document Viewer :可以直接在 Dokuwiki 中查看 Google 文档。 
-  * Fastwiki ï¼šä¼˜åŒ– Dokuwiki çš„访问速度(预加载)。 +  * MathJax :数学公式插件。 
-  * Google Document Viewer ï¼šå¯ä»¥ç›´æŽ¥åœ¨ Dokuwiki ä¸­æŸ¥çœ‹ Google æ–‡æ¡£ã€‚ +  * Pure SVG Insert:使 Dokuwiki 支持 SVG 的显示。 
-  * MathJax ï¼šæ•°å­¦å…¬å¼æ’件。 +  * DokuWiki Upgrade:一键升级 Dokuwiki,必备插件。 
-  * Pure SVG Insert:使 Dokuwiki æ”¯æŒ SVG çš„显示。 +  * Wrap:很好用的内容排版插件。 
-  * DokuWiki Upgrade:一键升级 Dokuwiki,必备插件。 +===Dokuwiki 相关问题=== 
-  * Wrap:很好用的内容排版插件。 +==Dokuwiki 上传附件显示 "Failed"== 
-===Dokuwiki ç›¸å…³é—®é¢˜=== +解决方法:进入服务器的 ''php.ini'' 配置文件,添加或修改以下设置:
-==Dokuwiki ä¸Šä¼ é™„件显示 "Failed"== +
-解决方法:进入服务器的 ''php.ini'' é…ç½®æ–‡ä»¶ï¼Œæ·»åŠ æˆ–修改以下设置:+
 <code php> <code php>
 always_populate_raw_post_data = -1 always_populate_raw_post_data = -1
 </code> </code>
-====服务器通用前端优化====+==Igor 版本 svg 缩放不正确== 
 +<WRAP center round important 100%> 
 +官方 issue 中解释该设置是一个 guard,不应修改。推荐对指定插件进行修改。 
 +</WRAP> 
 +将 ''/lib/styles/all.css'' 中 ''svg'' 的 
 +<code css> 
 +width: 1.2em; 
 +</code> 
 +替换为 
 +<code css> 
 +width: auto; 
 +</code> 
 + 
 +====服务器通用前端优化====
  
 ===Leverage browser caching=== ===Leverage browser caching===
  
-<del>如果使用 Nginx å¯¹ **Dokuwiki** è¿›è¡Œ Leverage browser caching,会导致被缓存的图片无法在媒体管理器以及正文中显示。该问题出现在从 Apache è¿ç§»åˆ° Nginx çš„过程中,怀疑是 Nginx æœ¬èº«å¯¹ Dokuwiki çš„支持不佳。</del>+<del>如果使用 Nginx 对 **Dokuwiki** 进行 Leverage browser caching,会导致被缓存的图片无法在媒体管理器以及正文中显示。该问题出现在从 Apache 迁移到 Nginx 的过程中,怀疑是 Nginx 本身对 Dokuwiki 的支持不佳。</del>
  
-<del>**解决方法(过时)**:由于 AMH çš„ ''Nginx.conf'' è‡ªå¸¦ caching,需要手动去 ''/yourwebdir/vhost/yourweb.conf'' å°†å¦‚下的缓存规则删除。</del>+<del>**解决方法(过时)**:由于 AMH 的 ''Nginx.conf'' 自带 caching,需要手动去 ''/yourwebdir/vhost/yourweb.conf'' 将如下的缓存规则删除。</del>
  
-<WRAP  round tip 60%> +<WRAP  round tip100%> 
-解决方法:使用新版本的重写规则,请参见前面。+解决方法:使用新版本的重写规则,请参见前面。
 </WRAP> </WRAP>
  
行 123: 行 146:
 \\ \\
 \\ \\
-**Nginx** ç‰ˆæœ¬çš„通用优化代码如下:+**Nginx** 版本的通用优化代码如下:
 <code nginx> <code nginx>
 location ~*  \.(jpg|jpeg|png|gif|ico|css|js)$ { location ~*  \.(jpg|jpeg|png|gif|ico|css|js)$ {
行 136: 行 159:
 ====Typecho==== ====Typecho====
  
-一些 Typecho çš„改造 ä½¿ç”¨ 问题收集。 +一些 Typecho 的改造 使用 问题收集。 
-===后台 Access Denied===+===后台 Access Denied===
  
-在 AMH ä¸­å¼€å¯ ''pathinfo'' æ’件的支持即可。+在 AMH 中开启 ''pathinfo'' 插件的支持即可。
  
-===Typecho æ”¹é€ æŒ‡å—===+===Typecho 改造指南===
  
-==评论:添加额外样式给管理员== +==评论:添加额外样式给管理员== 
-Typecho å¯ä»¥é’ˆå¯¹å½“前用户是否是管理员来添加额外的样式。一个简单的应用例子如下:+Typecho 可以针对当前用户是否是管理员来添加额外的样式。一个简单的应用例子如下:
 \\ \\
 \\ \\
-首先我们需要官方帮助文档中的自定义函数。该函数用于判断当前评论用户是否为管理员,通过 ''AuthorId'' å’Œ ''ownerid'' æ˜¯å¦ç›¸ç­‰æ¥åˆ¤æ–­ï¼š+首先我们需要官方帮助文档中的自定义函数。该函数用于判断当前评论用户是否为管理员,通过 ''AuthorId'' 和 ''ownerid'' 是否相等来判断:
 <code php> <code php>
 <?php function threadedComments($comments, $options) { <?php function threadedComments($comments, $options) {
行 153: 行 176:
     if ($comments->authorId) {     if ($comments->authorId) {
         if ($comments->authorId == $comments->ownerId) {         if ($comments->authorId == $comments->ownerId) {
-            $commentClass .= ' comment-by-author';  //如果是文章作者的评论添加 .comment-by-author æ ·å¼+            $commentClass .= ' comment-by-author';  //如果是文章作者的评论添加 .comment-by-author 样式
         } else {         } else {
-            $commentClass .= ' comment-by-user';  //如果是评论作者的添加 .comment-by-user æ ·å¼+            $commentClass .= ' comment-by-user';  //如果是评论作者的添加 .comment-by-user 样式
         }         }
     }      } 
-    $commentLevelClass = $comments->_levels > 0 ? ' comment-child' : ' comment-parent';  //评论层数大于0为子级,否则是父级+    $commentLevelClass = $comments->_levels > 0 ? ' comment-child' : ' comment-parent';  //评论层数大于0为子级,否则是父级
 ?> ?>
-/* è‡ªå®šä¹‰è¯„论的代码结构 */+/* 自定义评论的代码结构 */
 <?php } ?> <?php } ?>
 </code> </code>
 \\ \\
-接下来会通过一段函数将增加的样式表打印出来,结果是 ''comment-by-author'' æˆ–者 ''comment-by-user'':+接下来会通过一段函数将增加的样式表打印出来,结果是 ''comment-by-author'' 或者 ''comment-by-user''
 <code php> <code php>
 <li id="li-<?php $comments->theId(); ?>" class="comment-body<?php  <li id="li-<?php $comments->theId(); ?>" class="comment-body<?php 
行 178: 行 201:
 </code> </code>
 \\ \\
-有了这两段函数以后,剩下的工作就很简单了。以我要替换管理员在评论中名字的背景为例。首先将打印出来的字段应用到 HTML çš„调用中:+有了这两段函数以后,剩下的工作就很简单了。以我要替换管理员在评论中名字的背景为例。首先将打印出来的字段应用到 HTML 的调用中:
 <code php> <code php>
 <span class="comment-author<?php echo $commentClass; ?>"><?php $comments->author(); ?></span> <span class="comment-author<?php echo $commentClass; ?>"><?php $comments->author(); ?></span>
 </code> </code>
  
-上面的代码直接把 ''$commentClass'',也就是我们要额外附加的样式表加入了 ''comment-author'' è¿™ä¸ªæ ·å¼é‡Œã€‚如果是管理员,那么调用的样式表就是 ''.comment-author.comment-by-author'',否则就是 ''.comment-author.comment-by-user''。+上面的代码直接把 ''$commentClass'',也就是我们要额外附加的样式表加入了 ''comment-author'' 这个样式里。如果是管理员,那么调用的样式表就是 ''.comment-author.comment-by-author'',否则就是 ''.comment-author.comment-by-user''
 \\ \\
 \\ \\
-最后去 CSS é‡Œæ·»åŠ æ ·å¼è¡¨å³å¯ï¼š+最后去 CSS 里添加样式表即可:
  
 <code css> <code css>
 .comment-author.comment-by-author {background: #636363;padding: 5px;} .comment-author.comment-by-author {background: #636363;padding: 5px;}
 </code> </code>
-==评论:重写发表评论时间== +==评论:重写发表评论时间== 
-Typecho é»˜è®¤çš„时间输出格式是 PHP çš„格式。如果我们希望将其转换为“发表于多久多久之前” 的格式,可以通过以下的手段来实现:+Typecho 默认的时间输出格式是 PHP 的格式。如果我们希望将其转换为“发表于多久多久之前” 的格式,可以通过以下的手段来实现:
 \\ \\
 \\ \\
-首先我们需要往 ''function.php'' ä¸­æ·»åŠ ä¸€ä¸ªæ—¶é—´é‡å†™å‡½æ•°ï¼š+首先我们需要往 ''function.php'' 中添加一个时间重写函数:
 <code php> <code php>
-//时间转换输出+//时间转换输出
 function timesince($older_date,$comment_date = false) { function timesince($older_date,$comment_date = false) {
 $chunks = array( $chunks = array(
行 213: 行 236:
 if (($count = floor($since / $seconds)) != 0) break; if (($count = floor($since / $seconds)) != 0) break;
 } }
-/*如果是中文则不需要 count çš„判断,并且也不需要空格*/+/*如果是中文则不需要 count 的判断,并且也不需要空格*/
 if ($count == 1) { if ($count == 1) {
 $output = $count.' '.$name.' '.'ago'; $output = $count.' '.$name.' '.'ago';
行 221: 行 244:
 } }
 </code> </code>
-这个函数会获取以前的时间作为参æ•%ld(dsq);+这个函数会获取以前的时间作为参数,并转换成相应的字段,我们只需要拿到 ''comments.php'' 中使用即可。使用方法如下: 
 +<code php> 
 +<?php echo timesince($comments->created);?> 
 +</code> 
 +==评论:回复评论自带@跳转== 
 +首先到 ''function.php'' 中添加如下两个函数: 
 +<code php> 
 +//获取评论的锚点链接 
 +function get_comment_at($coid) 
 +
 +    $db   = Typecho_Db::get(); 
 +    $prow = $db->fetchRow($db->select('parent')->from('table.comments'
 +                                 ->where('coid = ? AND status = ?', $coid, 'approved')); 
 +    $parent = $prow['parent']; 
 +    if ($parent != "0") { 
 +        $arow = $db->fetchRow($db->select('author')->from('table.comments'
 +                                     ->where('coid = ? AND status = ?', $parent, 'approved')); 
 +        $author = $arow['author']; 
 +        $href   = '<a href="#comment-' . $parent . '">@' . $author . '</a>'; 
 +        echo $href; 
 +    } else { 
 +        echo ''; 
 +    } 
 +
 +//输出评论内容 
 +function get_filtered_comment($coid){ 
 +    $db   = Typecho_Db::get(); 
 +    $rs=$db->fetchRow($db->select('text')->from('table.comments'
 +                                 ->where('coid = ? AND status = ?', $coid, 'approved')); 
 +    $content=$rs['text']; 
 +    echo $content; 
 +
 +?> 
 +</code> 
 +\\ 
 +再到 ''comments.php'' 中使用如下代码调用即可: 
 +<code linenums:1> 
 +<?php get_comment_at($comments->coid)?> 
 +</code> 
 +==添加自定义html标签到文章内容== 
 +找到文件夹 ''/var'' 下的文件 ''HyperDown.php'' 第十七行,添加需要使用的标签即可。 
 +===Typecho 升级指南=== 
 + 
 +//Typecho// 可以通过以下方式来进行升级: 
 + 
 +  - 下载最新的版本:[[https://github.com/typecho/typecho|Typecho On Github]] 
 +  - 删除服务器上三个目录的文件,如果修改了源代码可以使用 //Github// 的对比工具来进行合并。三个目录分别是:''/admin'', ''/var'', 和根目录下的 ''index.php''。 
 +  - 上传最新的对应文件即可。 
 + 
 +===Typecho URL重写=== 
 + 
 +==Apache 重写规则== 
 +添加如下代码到 ''.htaccess'' 文件中即可。注意:''RewriteBase'' 后是网站的目录。 
 +<code apache> 
 +<IfModule mod_rewrite.c > 
 +    RewriteEngine On 
 +    RewriteBase / 
 +    RewriteCond %{REQUEST_FILENAME} !-f 
 +    RewriteCond %{REQUEST_FILENAME} !-d 
 +    RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1] 
 +</IfModule> 
 +</code> 
 + 
 +===InstantClick=== 
 + 
 +''instantclick.js'' 是一种ajax无刷新和预加载页面的技术,对于普通博客程序,有着明显的加速作用。''instantclick.js'' ≈ ''pjax'' 加上预加载页面,而且,使用方法也十分的简单。 
 + 
 +==安装InstantClick== 
 + 
 +下载 [[http://instantclick.io/download|InstantClick]] 
 +\\ 
 +\\ 
 +在 ''footer.php'' 的 ''</body>'' 标签之前插入以下代码: 
 +<code js> 
 +... 
 +<script src="instantclick.min.js" data-no-instant></script> 
 +<script data-no-instant>InstantClick.init();</script> 
 +</body> 
 +</html> 
 +</code> 
 + 
 +==点击时候的预加载== 
 + 
 +默认情况下是在鼠标悬停到链接上方即开始加载,有时候这样会带来服务器的额外开销问题。将 ''init'' 函数的参数设置为 ''mousedown'' 则可以通过点击的一瞬间进行预加载: 
 +<code> 
 +InstantClick.init('mousedown'); 
 +</code> 
 + 
 +==修改预加载条的颜色== 
 + 
 +在样式表中加入如下代码即可: 
 +<code css> 
 +#instantclick-bar { background: gray; } 
 +</code> 
 + 
 +==与 PrismJS兼容== 
 + 
 +先对 ''Prismjs'' 中需要预加载的部分进行设置: 
 +\\ 
 +\\ 
 +打开 ''Plugin.php'' 文件,找到 ''58'' 行: 
 +<code html js> 
 +<script>var pres = document.getElementsByTagName('pre'); 
 +</code> 
 +改为: 
 +<code html> 
 +<script data-no-instant>var pres = document.getElementsByTagName('pre'); 
 +</code> 
 +找到 ''64'' 行: 
 +<code html> 
 +<script src="' . $jsUrl . '"></script> 
 +</code> 
 +改为: 
 +<code html> 
 +<script src="' . $jsUrl . '" data-no-instant></script> 
 +</code> 
 +找到 ''66'' 行: 
 +<code html> 
 +<script defer="defer" src="' . Helper::options()->pluginUrl . '/Prismjs/line-number-wrap-fix.js' . '"></script> 
 +</code> 
 +改为: 
 +<code html js> 
 +<script defer="defer" src="' . Helper::options()->pluginUrl . '/Prismjs/line-number-wrap-fix.js' . '" data-no-instant></script> 
 +</code> 
 +\\ 
 +再修改位于 ''footer.php'' 中 ''instantclick'' 的白名单部分,添加属于 ''prismjs'' 的规则: 
 +<code js> 
 +if (typeof Prism !== 'undefined') {<?php  if (Helper::options()->plugin('Prismjs')->showln): ?> 
 +var pres = document.getElementsByTagName('pre'); 
 +    for (var i = 0; i < pres.length; i++){ 
 +        if (pres[i].getElementsByTagName('code').length > 0) 
 +            pres[i].className  = 'line-numbers';} <?php endif; ?> 
 +Prism.highlightAll(true,null);
 +</code> 
 +PHP 部分: 
 +<code php> 
 +{<?php  if (Helper::options()->plugin('Prismjs')->showln): ?>''  
 +</code> 
 +对判断插件是否使用了行号。如果没启用插件,会导致网站 **505** 错误。 
 +\\ 
 +\\ 
 +如果不使用行号,直接使用以下代码: 
 +<code php> 
 + if (typeof Prism !== 'undefined') { Prism.highlightAll(true,null);
 +</code> 
 + 
 +===Mathjax=== 
 +==mathjax 3 简单配置== 
 +<code js> 
 +MathJax = { 
 +        showProcessingMessages: false, 
 +        messageStyle: "none",     
 +    tex: { 
 +        inlineMath: [ ["$","$"], ["\\\\(","\\\\)"] ], 
 +        displayMath: [ ["$$","$$"], ["\\\\[","\\\\]"] ], 
 +        processEscapes: true 
 +    }, 
 +    svg: { 
 +        fontCache: "global" 
 +    } 
 +
 +</code> 
 +==igor 版本的缩放问题== 
 +添加以下代码到 ''/lib/styles/all.css'': 
 +<code cpp> 
 +mjx-container[jax="SVG"] > svg { 
 +    height: auto; 
 +    width: auto; 
 +
 +</code> 
 +==Mathjax与InstantClick不兼容== 
 + 
 +在 ''footer.php'' 中找到 ''InstantClick.on('change', function(isInitialLoad)'' 部分,加入以下规则: 
 +<code> 
 +if (typeof MathJax !== 'undefined'){MathJax.Hub.Queue(["Typeset",MathJax.Hub]);
 +</code> 
 +==Mathjax的直接添加== 
 + 
 +在 ''header.php'' 中的 ''<head>'' 之间加入如下代码: 
 +<code html> 
 +<script type="text/x-mathjax-config"> 
 +  MathJax.Hub.Config({ 
 +    extensions: ["tex2jax.js"], 
 +    jax: ["input/TeX", "output/HTML-CSS"], 
 +    tex2jax: { 
 +      inlineMath: [ ['$','$'], ["\\(","\\)"] ], 
 +      displayMath: [ ['$$','$$'], ["\\[","\\]"] ], 
 +      processEscapes: true 
 +    }, 
 +     
 +    "HTML-CSS": { availableFonts: ["TeX"] } 
 +  }); 
 +</script> 
 +<script type="text/javascript" 
 +   src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"> 
 +</script> 
 +</code> 
 +<WRAP center round info 100%> 
 +近日 //MathJax// 自营 CDN 已经停止服务,需自行寻找相关 CDN。 
 +</WRAP> 
 +\\ 
 +==Mathjax按需加载== 
 +首先在 ''post.php'' 中添加一个全局变量用于检测页面是否有数学公式: 
 +<code php> 
 +<?php $GLOBALS['mathjax'] = strpos($this->content, '[') || strpos($this->content, '('); ?> 
 +</code> 
 +接着到 Mathjax.js 调用的地方设置条件(我的是''footer.php''): 
 +<code php> 
 +<?php if($GLOBALS['mathjax']):?> 
 +  <!--mathjax--> 
 +  <script type="text/javascript" src="https://cdn.staticfile.org/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML"></script> 
 +<?php endif;?> 
 +</code> 
 + 
 +==Mathjax不显示加载信息== 
 +在 ''MathJax.Hub.Config'' 中添加如下代码: 
 +<code js> 
 +showProcessingMessages: false, //关闭js加载过程信息 
 +messageStyle: "none", //不显示信息 
 +</code> 
 + 
 +===Disqus=== 
 + 
 +==Disqus loading on scroll== 
 + 
 +<del>本实现需要 ''jquery'' 支持,并编辑  ''comments.php''。</del> 
 +\\ 
 +<WRAP round tip 60%> 
 +新版本不再使用 jquery。 
 +</WRAP> 
 + 
 +\\ 
 +\\ 
 +在 ''comments.php'' 中加入 如下 JS 代码: 
 +<code js> 
 +<script> 
 +var disqus_loaded = false; 
 + 
 +function load_disqus() 
 +
 +  disqus_loaded = true; 
 +  var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true; 
 +  dsq.src = "https://codinghare.disqus.com/embed.js"; 
 +  (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
 } }
  
行 233: 行 499:
 </code> </code>
 \\ \\
-注意替换 ''embed.js'' çš„地址为自己的 Disqus地址(直接替换 shortname å³å¯ï¼‰ã€‚+注意替换 ''embed.js'' 的地址为自己的 Disqus地址(直接替换 shortname 即可)。
 \\ \\
 \\ \\
-html è°ƒç”¨ï¼š+html 调用:
 <code html> <code html>
 <div id="disqus_thread"></div> <div id="disqus_thread"></div>
 </code> </code>
-\\ +
-\\+
 ====Flarum==== ====Flarum====
-===解决 nginx é‡å†™çš„问题=== +===解决 nginx 重写的问题=== 
-Flarum è‡ªå·±å¸¦ä¸€ä¸ªå­ç›®å½• ''public'' ä½œä¸ºè®ºå›çš„首页目录。很多网上的教程建议直接重写 vhost ä¸­çš„ root è·¯å¾„,但 AMH å¯¹æ­¤ä¼¼ä¹Žå¹¶ä¸å‹å¥½ã€‚另外一种办法是通过面板建立**子域主机**来重新定向域名的根目录到 ''public''。举个例子,如果需要指定域名 domain.com åˆ°è¯¥ç›®å½•ï¼Œéœ€è¦ä¿®æ”¹çš„如下: +Flarum 自己带一个子目录 ''public'' 作为论坛的首页目录。很多网上的教程建议直接重写 vhost 中的 root 路径,但 AMH 对此似乎并不友好。另外一种办法是通过面板建立**子域主机**来重新定向域名的根目录到 ''public''。举个例子,如果需要指定域名 domain.com 到该目录,需要修改的如下: 
-  -  ç»‘定 ''127.0.0.1'' åˆ°**父主机** +  -  绑定 ''127.0.0.1'' **父主机** 
-  - ç»‘定 domain.com åˆ°å­åŸŸä¸»æœº +  - 绑定 domain.com 到子域主机 
-  - ç»‘定子目录中填写 ''/public'' +  - 绑定子目录中填写 ''/public'' 
-  - åœ¨å­ä¸»æœºä¸­åŒ…含 ''.nginx.conf''(位于父主机网站根目录下),可参考官方安装帮助。 +  - 在子主机中包含 ''.nginx.conf''(位于父主机网站根目录下),可参考官方安装帮助。 
  
-===Flarum ç›®å½•æƒé™===+===Flarum 目录权限===
 <code bash> <code bash>
-$chown www:www -R /home/wwwroot/环境/domain/域名/web/+$chown www:www -R /home/wwwroot/环境/domain/域名/web/
 </code> </code>
 ===InnodB=== ===InnodB===
-如果遇到以下的错误:+如果遇到以下的错误:
 >flarum Something went wrong: SQLSTATE[42000]: Syntax error or access violation: 1286 Unknown storage engine 'InnoDB' >flarum Something went wrong: SQLSTATE[42000]: Syntax error or access violation: 1286 Unknown storage engine 'InnoDB'
-需要到 ''MAadmin'' - ''参数设置'' ä¸­æ‰“å¼€ ''InnoDB'' çš„开关。+需要到 ''MAadmin'' - ''参数设置'' 中打开 ''InnoDB'' 的开关。
 ===https 403=== ===https 403===
-如果出现 http è®¿é—®æ­£å¸¸ 而 https è®¿é—® 403 çš„情况,需要到 ''config.php'' åšå¦‚下修改:+如果出现 http 访问正常 而 https 访问 403 的情况,需要到 ''config.php'' 做如下修改:
 <code cpp> <code cpp>
 //default //default