MediaWiki
跳至導覽
跳至搜尋
MediaWiki | |
![]() | |
研發者 | 维基媒體基金會 |
---|---|
最初正式版 | 2002年1月25日 |
最新穩定版 | 1.37.0 / 2021年11月18日 |
作業系統 | 跨平台 |
可用語言 | 超過200種語言 |
類型 | Wiki引擎 |
授權協議 | GPLv2+ |
網站 | http://www.mediawiki.org |
MediaWiki,參照:『維基百科~MediaWiki』
安裝
相關文件
- MediaWiki: Introduction
- Manual:Installation guide(安裝指南)
- Manual:Upgrading(升級指南)
- Manual:Contents
- MediaWiki Documentation
- Manual:Short_URL……縮簡URL的方法(拿掉index.php?title=)
編輯手冊
研發手冊
- MediaWiki-core doc
- Manual:Tag extensions
- Manual:Parser functions
- Manual:Hooks
- Manual:Special pages
- Manual:Skins
- Manual:Magic words
- Manual:LocalSettings.php(架設MediaWiki時的相關設定)
- 關於MediaWiki與Extension的開發者
Wiki網站介面
- 網站的 icon (網頁瀏覽器家到書籤時所顯示的小圖示)
- 預設位置 /favicon.ico
- 或是在 LocalSettings.php 用 $wgFavicon 自訂網站 icon 圖示的Url
- 網站 Logo 圖示
- 舊版位置 /skins/common/images/wiki.png
- 新版位置 /resources/assets/wiki.png
- 或是在 LocalSettings.php 用 $wgLogo 自訂網站 Logo 圖示的Url
- 導航面板 MediaWiki:Sidebar
- 系統介面 Special:AllMessages
- Manual:Interface/JavaScript
- 其他
- 搜尋 MediaWiki:Googlesearch 範例 MediaWiki:Googlesearch
- 參照:『維基百科~Category:维基脚本』,參照:『維基百科~Wikipedia:WikiProject_User_scripts/Scripts』
- Manual:Collapsible elements - MediaWiki(折疊功能)
- 特殊:所有訊息
編輯工具強化
- 以下來自中文維基百科,需重新啟動MediaWiki系統,才會有作用(像是修改LocalSettings.php)……
- 且需裝 Extension:CharInsert 這個輔助文字輸入用的外掛
- 且需裝 Extension:Gadgets 這個JavaScript輔助的外掛
- 相關:
- 參照:『維基百科~Wikipedia:維基百科工具/編輯工具』(可與MediaWiki:Common.js相對照)
- VisualEditor icons
- Xi-Plus/MediaWiki-Gadget: My Javascript helper on Wikimedia and other wikis
外掛
載入外掛(需要修改LocalSettings.php)
//MediaWiki 1.24 以上版本使用 wfLoadExtension( '外掛名稱' ); //MediaWiki 1.23 之前版本使用 require_once "$IP/extensions/外掛名稱/外掛名稱.php";
預設在編輯時使用WikiEditor
- 另見:Extension:WikiEditor/Toolbar customization(自訂WikiEditor的Toolbar)
#需要修改LocalSettings.php # Enables use of WikiEditor by default but still allow users to disable it in preferences $wgDefaultUserOptions['usebetatoolbar'] = 1; $wgDefaultUserOptions['usebetatoolbar-cgd'] = 1; # Displays the Preview and Changes tabs $wgDefaultUserOptions['wikieditor-preview'] = 1; # Displays the Publish and Cancel buttons on the top right side $wgDefaultUserOptions['wikieditor-publish'] = 1;
各種外掛
MediaWiki 1.34.0內建外掛
載入外掛 | 簡介 | 備註 |
---|---|---|
wfLoadExtension( 'CodeEditor' ); | 支援 JavaScript 與 CSS 語法醒目標示編輯使用 Ace 編輯器 |
$wgDefaultUserOptions['usebetatoolbar'] = 1; |
wfLoadExtension( 'CategoryTree' ); | 可用動態更新的方式導覽 分類結構 | |
wfLoadExtension( 'Cite' ); | 添加用於引用的 <ref> 與 標籤 | |
wfLoadExtension( 'CiteThisPage' ); | 加入 引用 特殊頁面及工具箱連結 | |
wfLoadExtension( 'ConfirmEdit' ); | 提供 CAPTCHA 技術來阻止垃圾訊息和密碼猜解 | |
wfLoadExtension( 'Gadgets' ); | 讓使用者可以於 偏好設定 中自訂 CSS 與 JavaScript 的小工具 | |
wfLoadExtension( 'ImageMap' ); | 允許客戶端使用 <imagemap> 標籤製作可點選的影像地圖 | |
wfLoadExtension( 'InputBox' ); | 可引用預先定義好的 HTML 表格 | |
wfLoadExtension( 'Interwiki' ); | 加入用來檢視和編輯跨 Wiki 連結表的特殊頁面 |
|
wfLoadExtension( 'LocalisationUpdate' ); | 將在地化的資訊盡可能保持最新 | |
wfLoadExtension( 'MultimediaViewer' ); | 使用全螢幕介面以較大尺寸的方式顯示展開後的縮圖 | |
wfLoadExtension( 'Nuke' ); | 提供管理員可執行大量刪除的頁面 | |
wfLoadExtension( 'PageImages' ); | 收集有關頁面中圖片的資訊 | |
wfLoadExtension( 'ParserFunctions' ); | 加強分析器,提供邏輯函數功能 | |
wfLoadExtension( 'PdfHandler' ); | 使用圖片模式檢視 PDF 檔案的處理程式。 | |
wfLoadExtension( 'Poem' ); | 提供 <poem> 標籤給予詩詞格式使用 (文章內容不自動串接) | |
wfLoadExtension( 'Renameuser' ); | 加入用來重新命名使用者的特殊頁面 (需要開啟 renameuser 權限) | |
wfLoadExtension( 'Scribunto' ); | 用來內嵌腳本語言到 MediaWiki 頁面的框架 | |
wfLoadExtension( 'SpamBlacklist' ); | 以正規表示法為基礎的防濫用工具,可將頁面中的URL及已註冊使用者的Email地址列入黑名單。 |
|
wfLoadExtension( 'SyntaxHighlight_GeSHi' ); | 使用 Pygments - Python syntax highlighter 提供可強調語法顯示的 <syntaxhighlight> 標籤。 | |
wfLoadExtension( 'TextExtracts' ); | 提供純文字或受限的頁面內容 HTML 匯出 | |
wfLoadExtension( 'TitleBlacklist' ); | 允許管理員可使用標題黑名單與標題白名單來禁止建立頁面與使用者帳號。 | |
wfLoadExtension( 'WikiEditor' ); | 提供高級、可擴充的 Wiki 文字編輯介面 |
MediaWiki 其他外掛
載入外掛 | 簡介 | 備註 |
---|---|---|
wfLoadExtension( 'AdvancedSearch' ); | 在Special:Search提供高級搜尋功能的輕鬆存取 | |
wfLoadExtension( 'SimpleFeed' ); | Uses SimplePie to output RSS/atom feeds | |
wfLoadExtension( 'SyntaxHighlight_GeSHi' ); | 使用 GeSHi Highlighter 提供可強調語法顯示的 <syntaxhighlight> 標籤。 | |
wfLoadExtension( 'Tabs' ); | 增加 <tabs> 與 <tab> 標籤用來建立使用頁籤的版面。 | |
wfLoadExtension( 'LunarFunctions' ); | 提供計算農曆功能 | |
wfLoadExtension( 'Echo' ); |
| |
wfLoadExtension( 'Flow' ); | 結構式討論 |
wfLoadExtension( 'ParserFunctions' ); wfLoadExtension( 'Echo' ); $wgNamespaceContentModels[NS_TALK] = 'flow-board'; $wgNamespaceContentModels[NS_USER_TALK] = 'flow-board'; wfLoadExtension( 'Flow' );
include_once __dir__ .'/Pimple/Container.php';
|
- 其他
https://extdist.wmflabs.org/dist/extensions/
- 需用git下載
https://phabricator.wikimedia.org/source/extensions.git https://github.com/wikimedia/mediawiki-extensions.git
其他相關
MediaWiki
Semantic MediaWiki
相關討論區
FAQ
啟用Debug模式
- 在 LocalSettings.php
error_reporting( -1 ); ini_set( 'display_startup_errors', 1 ); ini_set( 'display_errors', 1 ); $wgShowSQLErrors = true; $wgDebugDumpSql = true; $wgShowExceptionDetails = true; $wgDevelopmentWarnings = true;
【安全性相關】禁止未登入者編輯
- 用途:防止來路不明的廣告
- 資料來源: Manual:User_rights
- 在LocalSettings.php的最後面追加:
#禁止未登入者建立帳號 $wgGroupPermissions['*']['createaccount'] = false; #禁止未登入者編輯 $wgGroupPermissions['*']['edit'] = false; $wgGroupPermissions['*']['writeapi'] = false; $wgGroupPermissions['*']['createpage'] = false; $wgGroupPermissions['*']['createtalk'] = false;
【安全性相關】防止異常URL耗盡主機的CPU資源
- 警告, MediaWiki 各版本可能隱含CPU資源耗盡的漏洞?(目前已知MediaWiki 1.12.0有此漏洞)。
- 治標方式,修改index.php
- 將未有title參數的URL,重定向到首頁。(title為null或空字串)
- action為URL中第一個傳入參數,此為非正常的MediaWiki的URL,重定向到首頁。
- 迴避Ajax的分類樹的URL參數(?action=ajax與?rs=)
# Query string fields $action = $wgRequest->getVal( 'action', 'view' ); $title = $wgRequest->getVal( 'title' ); #請自行加上,下面這段, 可將非正常參數的URL導向首頁 Fix Bug? #(如果你的首頁位置不是「index.php/%E9%A6%96%E9%A0%81」,請自行改寫下列header內的字串) if (is_null($_GET["rs"]) and ((is_null( $title ) or ($title == "")) or ((substr($_SERVER['QUERY_STRING'],0,7)=='action=') and ($_GET["action"]!="ajax")))) { header("Location: index.php/%E9%A6%96%E9%A0%81"); exit; #header("Location: " & $wgScriptPath & "/index.php/%E9%A6%96%E9%A0%81" ); exit; }
伺服器端縮圖失敗
- 用途:禁止伺服器端縮圖
- 由於PHP的安全性設定,導致與縮圖相關的程式碼跑到passthru()就跳失敗了
- 在LocalSettings.php的最後面追加下列三行:
$wgUseImageMagick = false; $wgUseImageResize = false; $wgGenerateThumbnailOnParse = false;
MediaWiki機器人
計算內部連結的紅連與藍連的數量
javascript:(function(){var%20j=0;var%20array=document.getElementById('content').getElementsByTagName('A');var%20k=array.length;for(i=0;i%3Carray.length;i++){l=array[i].href;if(l.indexOf(document.location.href.split(/^http\:\/\/([a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(:[a-zA-Z0-9]*)%3F)\//)[1])%3C0||l.indexOf('%23')%3E0||l.indexOf('section')%3E0)k--;if(l.indexOf('redlink')%3E0){j++;k--;}}prompt(document.getElementById('firstHeading').textContent+'%E5%85%B1%E6%9C%89%EF%BC%9A','%E7%B4%85%EF%BC%9A'+j+'%20%E8%97%8D%EF%BC%9A'+k+'%20%E6%AF%94%E4%BE%8B%EF%BC%9A'+(j/k));})();
User自訂Skin的js與css
- 參照:
- Manual:$wgAllowUserJs
- Manual:$wgAllowUserCss
- 在LocalSettings.php的最後面追加下列兩行:
$wgAllowUserJs = true; $wgAllowUserCss = true;
自定網路書源
- Manual:ISBN
- 以中文介面為例,需改 languages/messages/MessagesZh_hant.php 裡的 $bookstoreList
$bookstoreList = array( '博客來書店' => 'http://search.books.com.tw/exep/prod_search.php?cat=BKA&key=$1&apid=books&areaid=head_cat_search', '三民書店' => 'http://www.sanmin.com.tw/page-qsearch.asp?ct=search_isbn&qu=$1', '天下書店' => 'http://www.cwbook.com.tw/searchProduct/QueryProductAction.shtml?searchField=ISBN&searchKeyWord=$1&searchUpAge=&searchBottomAge=', '新絲路書店' => 'http://www.silkbook.com/search_result.asp?SearchText=$1&SearchOption=4' );
如何只使用一份MediaWiki的Code去架多個Wiki
- 維基農場
-
- 請注意,MediaWiki是很吃資源的一種Wiki,架設過多的Wiki,可能會導致被php虛擬主機商強迫關站,因此使用前請三思。
- MediaWiki下載與安裝(限定使用1.25~1.19的版本,例如安裝在 /wiki),最初安裝時資料庫前置使用「 mw_ 」以便配合Extension:Farmer。
- Extension:Farmer下載對應的版本,將該外掛放到 extensions 資料夾裡。
- 將外掛的farmer.sql,拿到資料庫裡跑過一遍,建立相關的資料表。再把 mw_user 建立檢視 user。
- 修改你的 LocalSettings.php,以下內容請配合你最初安裝MediaWiki的設定做修改:
# MySQL specific settings $wgDBprefix = "mw_"; $callingurl = $_SERVER['REQUEST_URI']; if ( preg_match( '/[^\/]+/', $callingurl, $matches ) === 1 ) { if ( array_key_exists( 0, $matches ) ) { //$wgDBprefix = $matches[0] . "_"; $wgScriptPath = "/" .$matches[0]; $wgStylePath = "$wgScriptPath/skins"; //$wgLogo = "/wikis/" . $matches[0] ."/wiki.png"; $wgUploadDirectory = "/home/wf0822/public_html/wikis/" . $matches[0] ."/images"; $wgUploadPath = "/wikis/" . $matches[0] ."/images"; } } # 中間的其他設定 # require_once( "$IP/extensions/Farmer/Farmer.php" ); /* We use the internal _matchByURLHostname function to find the wiki name */ #依子目錄區分的模式 $wgFarmerSettings['wikiIdentifierFunction'] = array( 'MediaWikiFarmer', '_matchByURLRegExp' ); $wgFarmerSettings['matchRegExp'] = '/[^\/]+/'; $wgFarmerSettings['matchOffset'] = 0; $wgFarmerSettings['dbAdminUser'] = $wgDBadminuser; $wgFarmerSettings['dbAdminPassword'] = $wgDBadminpassword; $wgFarmerSettings['databaseName'] = $wgDBname; $wgFarmerSettings['dbTablePrefixSeparator'] = '_'; # Use this file in early versions $wgFarmerSettings['newDbSourceFile'] = realpath( dirname( __FILE__ ) ) . '/maintenance/tables.sql'; $wgFarmerSettings['defaultWiki'] = "mw"; # Change it to one you want required by default $wgFarmer = new MediaWikiFarmer( $wgFarmerSettings ); $wgFarmer->run();
- 依子目錄區分的模式需要在網站根目錄的.htaccess 設定 Url Rewrite
SetEnv TZ Asia/Taipei RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^[^\/]+/(.+)$ wiki/$1 [PT,L,QSA] RewriteRule ^[^\/]+/$ wiki/index.php [PT,L,QSA] RewriteRule ^[^\/]+$ wiki/index.php [PT,L,QSA]
- 修改MediaWikiFarmer_Wiki.php(不然新建Wiki時,相關的資料表無法順利建立?)
- 未完,待查 (目前預設首頁與預設User與群組資料, 沒有正常建立? 原因不明)
public function create() { $farmer = MediaWikiFarmer::getInstance(); // save the database prefix accordingly $this->wgDefaultSkin = $farmer->defaultSkin; // before we create the database, make sure this database doesn't really exist yet if ( !$this->exists() && !$this->databaseExists() ) { # global $wgDBprefix, $wgDBname; $wgDBprefix_tmp = $wgDBprefix; $wgDBprefix= $this->_name . '_'; $db2 = $this->getDatabase(); $db2->tablePrefix($wgDBprefix); $db2->selectDB( $wgDBname ); # $this->save(); $this->createDatabase(); $farmer->updateFarmList(); # $wgDBprefix = $wgDBprefix_tmp; $db2->tablePrefix($wgDBprefix); # } else { throw new MWException( wfMsgHtml( 'farmer-error-exists', $this->_name ) ); } } public function createDatabase() { $this->_createTablesForWiki(); //預設首頁建立失敗? //$this->_createMainPageForWiki(); $this->_populateInterwiki(); //群組建立了, 但是使用者沒建立? $this->_populateUserGroups(); }
- 其他請自行參照Extension:Farmer手冊
- 其他
常見故障原因
- 主機上的temp路徑唯獨或沒有寫入權限
- 在LocalSettings.php 另設 $wgTmpDirectory 變數, 給它一個權限為755的路徑
- 主機上的PHP因為預設啟用魔術引號功能?
- 在 .htaccess 加上 php_flag magic_quotes_gpc Off
- 圖檔上傳失敗
- images下的所有資料夾不是777權限,圖檔會先寫到/images/lockdir再複製到對應的資料夾
載入Script
- 1.修改 LocalSettings.php
$wgHooks['BeforePageDisplay'][] = function( OutputPage &$out, Skin &$skin ) { $out->addScriptFile( 'https://www.example.org/awesomescript.js' ); };
- 2.修改 MediaWiki:Gadgets-definition 並新增對應的Script
- 3.在Script裡使用
- ResourceLoader/Core modules - MediaWiki
- ResourceLoader/Migration guide (users) - MediaWiki
- jQuery.getScript() - jQuery API Documentation
mw.loader.load( 'https://www.example.org/index.php?title=MediaWiki:Example.js&action=raw&ctype=text/javascript' ); //或是 mw.loader.getScript( 'https://www.example.org/index.php?title=MediaWiki:Example.js&action=raw&ctype=text/javascript' ); //或是 $.getScript( 'https://www.example.org/index.php?title=MediaWiki:Example.js&action=raw&ctype=text/javascript' );
Js常用變數
用途 | 變數 | 值 |
---|---|---|
頁面動作 | mw.config.get('wgAction') |
|
命名空間 | mw.config.get('wgNamespaceNumber') |
|
特殊頁面 | mw.config.get('wgCanonicalSpecialPageName') |
|
Log檔不斷成長的問題
- 需定期刪除MediaWiki所在資料夾裡的 error_log 檔案
importScript()已停用
// Local script mw.loader.load( '/w/index.php?title=MediaWiki:Gadget-HotCat.js&action=raw&ctype=text/javascript' ); // Local script mw.loader.getScript( 'https://example.org/x-1.0.0.js' ) .then( function () { // Script succeeded. You can use X now. }, function ( e ) { // Script failed. X is not available mw.log.error( e.message ); // => "Failed to load script" } ); } );
- 或改用Gadgets方式載入,需修改MediaWiki:Gadgets-definition
啟用MagicLink
- Help:Magic links - MediaWiki
- 在 LocalSettings.php 加上
$wgEnableMagicLinks['ISBN'] = true; //書籍類 $wgEnableMagicLinks['RFC'] = true; //網路相關技術文件 $wgEnableMagicLinks['PMID'] = true; //生命科學和醫學等領域的文獻
- 相關
- 特殊:所有訊息
- rfcurl
- pubmedurl
- magiclink-tracking-isbn
- magiclink-tracking-rfc
- magiclink-tracking-pmid
特殊頁面的跨語言
- MediaWiki:Gadget-interLanguageLink.js
( function ( $, mw ) { var interLanguageLinkSet = { 'Recentchanges' : [ { lang: 'en', name: '英文', url: 'https://en.wikipedia.org/wiki/Special:RecentChanges' }, { lang: 'ja', name: '日文', url: 'https://ja.wikipedia.org/wiki/%E7%89%B9%E5%88%A5:%E6%9C%80%E8%BF%91%E3%81%AE%E6%9B%B4%E6%96%B0' } ] }; // 在特殊頁面加上跨語言連結 //if (mw.config.get('wgCanonicalNamespace') == 'Special') { if (mw.config.get('wgNamespaceNumber') === -1) { specialPageName = mw.config.get('wgCanonicalSpecialPageName'); skin = mw.config.get('skin'); linkSet = interLanguageLinkSet[specialPageName]; if (linkSet != null) { $('#p-lang>div>ul').html(""); linkSet.forEach(function(item, index, array){ content = '<li class="interlanguage-link interwiki-'+ item.lang + '"><a href="' + item.url +'" title="" hreflang="' + item.lang + '" class="interlanguage-link-target" lang="' + item.lang + '">' + item.name + '</a></li>'; $('#p-lang>div>ul').append(content); }); } } }( jQuery, mediaWiki ) );
防止非正常URL進入
// Check to make sure we're actually in MediaWiki. if (!defined('MEDIAWIKI')) { echo 'This file is part of MediaWiki. It is not a valid entry point.'; exit(1); }
其他因為MediaWiki改版衍生的錯誤
- MediaWiki Call to undefined method Parser::disableCache()
- 把 ->disableCache(); 改成 ->getOutput()->updateCacheExpiry(0);