本 Wiki 开启了 HTTPS。但由于同 IP 的 Blog 也开启了 HTTPS,因此本站必须要支持 SNI 的浏览器才能浏览。为了兼容一部分浏览器,本站保留了 HTTP 作为兼容。如果您的浏览器支持 SNI,请尽量通过 HTTPS 访问本站,谢谢!
这是本文档旧的修订版!
ä¸äºä¸ªäººç½ç«ç¯å¢é ç½®å常è§é®é¢è®°å½ã
Referencesï¼
使ç¨ä»¥ä¸å½ä»¤åå¯ä»¥æ¥çï¼
cat /root/amh.log
MYSQL å¨é坿å¡å¨æ¶ä¸è½å¯å¨ï¼å°è¯ä»¥ä¸æ¹æ³ï¼
å é¤ my.inf
ã
cd /etc/
rm my.inf
åIPçå¤ä¸ªèæä¸»æºåªéè¦ä¸ä¸ª SSLè¯ä¹¦å³å¯ãé ç½®æ¥éª¤ï¼
amh.sh/ssl.htm
ä¸ç³è¯·è¯ä¹¦ï¼ç³è¯·çæ¶åå°ææèæä¸»æºçååè¾å
¥ãamhssl
䏿·»å ãRreferencesï¼
å°ä¸åè§åæ·»å å° AMH ç rewrite
模åä¸ï¼
location / {
index doku.php;
try_files $uri $uri/ @dokuwiki;
}
#caching: warning: will cause picture 404 problem if your wiki is running in rewrite mode 1.
location ~ ^/lib.*\.(gif|png|ico|jpg)$ {
expires 30d;
}
#dir safety
location ^~ /conf/ { return 403; }
location ^~ /data/ { return 403; }
#rewrite
Location @dokuwiki {
# rewrites "doku.php/" out of the URLs if you set the userewrite setting to .htaccess in dokuwiki config page
rewrite ^/_media/(.*) /lib/exe/fetch.php?media=$1 last;
rewrite ^/_detail/(.*) /lib/exe/detail.php?media=$1 last;
rewrite ^/_export/([^/]+)/(.*) /doku.php?do=export_$1&id=$2 last;
rewrite ^/(.*) /doku.php?id=$1&$args last;
}
Dokuwiki URL Rewrite ä¸ä»¥ä¸ä»£ç å²çªï¼
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp3|wma)$ {
expires 30d;
}
è AMH ç nginx.conf
éè¦å°æå»ºç«çç¯å¢ä¸ç vhost
ç®å½ä¸æ¾å¯¹åºèæä¸»æºçæä»¶ï¼ä¸è¬æ¯ä»¥ åå.conf
æ ¼å¼ç conf
æä»¶ï¼ãæ¾å°ä»¥åç¶åå°éé¢çè¯¥æ®µä»£ç æ³¨éæã妿ç¨äº Https, ååæ¶éè¦æ³¨éæ HTTPS çæ¬ç conf
æä»¶ã
该段代ç ç¨äºé²æ¢é¤ conf
å data
以å¤çéè¦æä»¶æ¬ä¸è½½ã
使ç¨ï¼æ·»å 以ä¸ä»£ç å° rewrite
模åä¸ï¼
# Block access to data folders
location ~ /(data|conf|bin|inc)/ {
deny all;
}
# Block access to .htaccess files
location ~ /\.ht {
deny all;
}
è§£å³æ¹æ³ï¼è¿å
¥æå¡å¨ç php.ini
é
ç½®æä»¶ï¼æ·»å æä¿®æ¹ä»¥ä¸è®¾ç½®ï¼
always_populate_raw_post_data = -1
å¦æä½¿ç¨ Nginx 对 Dokuwiki è¿è¡ Leverage browser cachingï¼ä¼å¯¼è´è¢«ç¼åçå¾çæ æ³å¨åªä½ç®¡çå¨ä»¥åæ£æä¸æ¾ç¤ºã该é®é¢åºç°å¨ä» Apache è¿ç§»å° Nginx çè¿ç¨ä¸ï¼æçæ¯ Nginx æ¬èº«å¯¹ Dokuwiki çæ¯æä¸ä½³ã
è§£å³æ¹æ³ï¼è¿æ¶ï¼ï¼ç±äº AMH ç
Nginx.conf
èªå¸¦ cachingï¼éè¦æå¨å» /yourwebdir/vhost/yourweb.conf
å°å¦ä¸çç¼åè§åå é¤ã
è§£å³æ¹æ³ï¼ä½¿ç¨æ°çæ¬çéåè§åï¼è¯·åè§åé¢ã
Nginx çæ¬çéç¨ä¼å代ç å¦ä¸ï¼
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 365d;
}
location ~* \.(pdf)$ {
expires 30d;
}
ä¸äº Typecho çæ¹é / ä½¿ç¨ é®é¢æ¶éã
å¨ AMH ä¸å¼å¯ pathinfo
æä»¶çæ¯æå³å¯ã
Typecho å¯ä»¥é对å½åç¨æ·æ¯å¦æ¯ç®¡çåæ¥æ·»å é¢å¤çæ ·å¼ãä¸ä¸ªç®åçåºç¨ä¾åå¦ä¸ï¼
é¦å
æä»¬éè¦å®æ¹å¸®å©ææ¡£ä¸çèªå®ä¹å½æ°ãè¯¥å½æ°ç¨äºå¤æå½åè¯è®ºç¨æ·æ¯å¦ä¸ºç®¡çåï¼éè¿ AuthorId
å ownerid
æ¯å¦ç¸çæ¥å¤æï¼
<?php function threadedComments($comments, $options) {
$commentClass = '';
if ($comments->authorId) {
if ($comments->authorId == $comments->ownerId) {
$commentClass .= ' comment-by-author'; //å¦ææ¯æç« ä½è
çè¯è®ºæ·»å .comment-by-author æ ·å¼
} else {
$commentClass .= ' comment-by-user'; //妿æ¯è¯è®ºä½è
çæ·»å .comment-by-user æ ·å¼
}
}
$commentLevelClass = $comments->_levels > 0 ? ' comment-child' : ' comment-parent'; //è¯è®ºå±æ°å¤§äº0为å级ï¼å¦åæ¯ç¶çº§
?>
/* èªå®ä¹è¯è®ºç代ç ç»æ */
<?php } ?>
comment-by-author
æè
comment-by-user
ï¼
<li id="li-<?php $comments->theId(); ?>" class="comment-body<?php
if ($comments->levels > 0) {
echo ' comment-child';
$comments->levelsAlt(' comment-level-odd', ' comment-level-even');
} else {
echo ' comment-parent';
}
$comments->alt(' comment-odd', ' comment-even');
echo $commentClass;
?>">
<span class="comment-author<?php echo $commentClass; ?>"><?php $comments->author(); ?></span>
ä¸é¢ç代ç ç´æ¥æ $commentClass
ï¼ä¹å°±æ¯æä»¬è¦é¢å¤éå çæ ·å¼è¡¨å å
¥äº comment-author
è¿ä¸ªæ ·å¼éã妿æ¯ç®¡çåï¼é£ä¹è°ç¨çæ ·å¼è¡¨å°±æ¯ .comment-author.comment-by-author
ï¼å¦åå°±æ¯ .comment-author.comment-by-user
ã
æåå» CSS éæ·»å æ ·å¼è¡¨å³å¯ï¼
.comment-author.comment-by-author {background: #636363;padding: 5px;}
Typecho é»è®¤çæ¶é´è¾åºæ ¼å¼æ¯ PHP çæ ¼å¼ã妿æä»¬å¸æå°å
¶è½¬æ¢ä¸ºâå表äºå¤ä¹
å¤ä¹
ä¹åâ çæ ¼å¼ï¼å¯ä»¥éè¿ä»¥ä¸çææ®µæ¥å®ç°ï¼
é¦å
æä»¬éè¦å¾ function.php
䏿·»å ä¸ä¸ªæ¶é´éå彿°ï¼
//æ¶é´è½¬æ¢è¾åº
function timesince($older_date,$comment_date = false) {
$chunks = array(
array(86400 , 'Day'),
array(3600 , 'Hour'),
array(60 , 'Minute'),
array(1 , 'Second'),
);
$newer_date = time();
$since = abs($newer_date - $older_date);
for ($i = 0, $j = count($chunks); $i < $j; $i++){
$seconds = $chunks[$i][0];
$name = $chunks[$i][1];
if (($count = floor($since / $seconds)) != 0) break;
}
/*妿æ¯ä¸æåä¸éè¦ count ç夿ï¼å¹¶ä¸ä¹ä¸éè¦ç©ºæ ¼*/
if ($count == 1) {
$output = $count.' '.$name.' '.'ago';
}
else {$output = $count.' '.$name.'s'.' '.'ago'; }
return $output;
}
è¿ä¸ªå½æ°ä¼è·å以åçæ¶é´ä½ä¸ºåæ%ld(dsq);
}
window.onscroll = function(e) {
if ((window.innerHeight + window.scrollY) >= document.body.offsetHeight) { //hit bottom of page if (disqus_loaded==false){ load_disqus() }; }
};
</script>
</code>
æ³¨ææ¿æ¢ embed.js
çå°å为èªå·±ç Disquså°åï¼ç´æ¥æ¿æ¢ shortname å³å¯ï¼ã
html è°ç¨ï¼
<div id="disqus_thread"></div>
Flarum èªå·±å¸¦ä¸ä¸ªåç®å½ public
ä½ä¸ºè®ºåçé¦é¡µç®å½ãå¾å¤ç½ä¸çæç¨å»ºè®®ç´æ¥éå vhost ä¸ç root è·¯å¾ï¼ä½ AMH 对æ¤ä¼¼ä¹å¹¶ä¸å好ãå¦å¤ä¸ç§åæ³æ¯éè¿é¢æ¿å»ºç«ååä¸»æºæ¥éæ°å®åååçæ ¹ç®å½å° public
ã举个ä¾åï¼å¦æéè¦æå®åå domain.com å°è¯¥ç®å½ï¼éè¦ä¿®æ¹çå¦ä¸ï¼
127.0.0.1
å°ç¶ä¸»æº/public
.nginx.conf
ï¼ä½äºç¶ä¸»æºç½ç«æ ¹ç®å½ä¸ï¼ï¼å¯åè宿¹å®è£
帮å©ã
$chown www:www -R /home/wwwroot/ç¯å¢/domain/åå/web/
妿éå°ä»¥ä¸çé误ï¼
flarum Something went wrong: SQLSTATE[42000]: Syntax error or access violation: 1286 Unknown storage engine 'InnoDB'
éè¦å° MAadmin
- åæ°è®¾ç½®
ä¸æå¼ InnoDB
çå¼å
³ã
妿åºç° http è®¿é®æ£å¸¸ è https è®¿é® 403 çæ
åµï¼éè¦å° config.php
åå¦ä¸ä¿®æ¹ï¼
//default
http://yourdomain.com
//change to
https://yourdomain.com