2010-10-06 97 views

回答

4

http://en.wikipedia.org/wiki/Wikipedia:Naming_conventions_%28technical_restrictions%29 - 在這裏,您已經對他們的引擎在文章名稱上執行的操作進行了某種描述。

他們應該在LocalSettings.php中有這樣的內容: $ wgArticlePath ='/ wiki/$ 1';

和正確的服務器URI重寫配置 - 它們似乎使用Apache(HTTP標頭),所以它可能是mod_rewrite。 http://www.mediawiki.org/wiki/Manual:Short_URL

您也可以參考index.php文件的維基百科上的文章是這樣的:http://en.wikipedia.org/w/index.php?title=Foo%20bar並獲得由發動機重定向到http://en.wikipedia.org/wiki/Foo_bar。在幕後,mod_rewrite將其轉換爲/index.php?title=Foo_bar。對於MediaWiki引擎來說,就像您訪問http://en.wikipedia.org/w/index.php?title=Foo_bar一樣 - 此頁面不會重定向您。

+0

我相信'mod_rewrite'不會將URL重寫爲'index.php?title = Foo_bar'。鏈接被重寫(如果有的話)到索引。php/Foo_bar',然後通過$ _SERVER ['REQUEST_URI']'或類似的東西讀取。 – lonesomeday 2010-10-08 20:52:10

6

這個過程相當複雜,並不完全漂亮。您需要查看includes/Title.php中的Title類。您應該從newFromText方法開始,但大部分邏輯都在secureAndSplit方法中。

請注意(與MediaWiki一樣)代碼不會輕微分離。如果你想複製它,你需要提取邏輯,而不是簡單地重新使用類。

的邏輯看起來是這樣的:

  • 解碼字符引用(例如& eacute;)
  • 轉換空間,以強調
  • 檢查標題是否是一個命名空間的引用或wiki的
  • 刪除哈希碎片(例如Apple#Name
  • 刪除禁止的字符
  • 禁止子目錄鏈接(例如../directory/page
  • 禁止三重波浪序列(~~~)(出於某種原因)
  • 限制的大小爲255個字節
  • 首字母大寫

而且,我認爲我說得對引號不需要由原始用戶編碼 - 瀏覽器可以透明地處理它們。

我希望有幫助!

+0

如何處理段名稱([[Apple#Name] here],#Name_here位)...?你說'刪除哈希碎片'就好像它們被忽略一樣。 – 2013-02-26 03:42:15

+0

「禁止三重代字符串序列(~~~)(出於某種原因)」 - 三重代字符[已擴展](https://www.mediawiki.org/wiki/Help:Signatures)在頁面保存中進行簽名,因此它使感覺不允許他們在標題中(鏈接到這樣的頁面會很棘手或不可能)。 – leo 2014-12-15 10:57:53