更改MediaWiki表单目标网址

时间:2014-07-04 07:55:01

标签: mediawiki

我已经成功地将大多数<a>网址更改为更漂亮(通过$wgActionPaths和{{3}}的组合将所有数百万条/w/index.php?title=foo&....链接隐藏到/wiki/Foo?...中客户端javascript:

jQuery(function ($) {
  $('[href*="title="]').attr('href', function (i, value) {
    return value.replace(/\/w\/index.php\?title=(.+?)\&(.+?)/, "/wiki/$1?$2")
  })
})

(我懒得把它翻译成PHP)

剩下的唯一链接是

的目标网址
  • 搜索表单
  • 历史页面“比较所选版本”和“浏览历史记录”表单

如何制作这些更清晰的目标网址?

2 个答案:

答案 0 :(得分:0)

以下LocalSettings.php

的组合
$actions = [ 'watch', 'unwatch', 'delete', 'revert', 'rollback', 'protect', 
                'unprotect', 'markpatrolled', 'render', 'submit', 'purge' ];
foreach ($actions as $action)
        $wgActionPaths[$action] = "/wiki/$1?action=$action";

改变了一些html链接

MediaWiki:Common.js

  $('#searchform').attr('action', '/wiki/Special:Search')
  $('form').attr('action', function (i, value) {
    return value.replace("/w/index.php", "/wiki/" + $('[name="title"]', this).attr('value'))
  })
  $("[name='title']",$('form')).remove()

修复搜索操作,以及特殊页面形式

答案 1 :(得分:0)

以下.htaccess规则可用于将所有 /w/index.php?...&title=Article&...链接重定向到/wiki/Article?...变体:

# force any /w/index.php urls back to the /wiki/ variant
RewriteCond %{QUERY_STRING} title=([^&]+) 
RewriteRule ^/?w/index.php$ /wiki/%1 [QSA,NE,R=302]

不幸的是,在各个点使用的无数形式导致查询参数为percent-encoded,使得.htaccess QSA标志失败,而您最终到达/wiki/Special%3ARecentChanges例如。在插入%2F导致所有内容中断的子页面上,这尤其失败。

编辑:可以通过在服务器设置中启用以下RewriteMap来解决上述百分比编码问题(不适用于.htaccess本身):

RewriteMap unescape int:unescape

,然后将%1行中的RewriteRule替换为

RewriteRule ^/?w/index.php$ /wiki/${unescape:%1} [QSA,NE,R=302]

编辑:要进一步从最终网址中删除剩余/重复的title=参数,请包含以下规则(找到here):

# remove title query parameter
RewriteCond %{QUERY_STRING} ^(.*)&?title=[^&]+&?(.*)$ [NC]
RewriteRule ^(/?wiki/.+)$ /$1?%1&%2 [NE,R]