Mediawiki 重写到外部站点

Posted

技术标签:

【中文标题】Mediawiki 重写到外部站点【英文标题】:Mediawiki Rewrite to external site 【发布时间】:2013-01-08 06:03:26 【问题描述】:

我正在将我的网站从 Mediawiki 移动到 Wordpress,并希望重定向此页面:

http://wecheck.org/wiki/Aaron_Swartz

到这个页面:

http://newslines.org/wiki/category/computer-people/aaron-swartz/

目前在 .htaccess 我有

Options +FollowSymlinks
RewriteEngine on 

RewriteCond %QUERY_STRING ^title=Aaron_Swartz$
RewriteRule ^/w/index\.php$ http://newslines.org/wiki/category/computer-people/aaron-swartz/? [L,R=301]


RewriteRule ^/?wiki(/.*)?$ %DOCUMENT_ROOT/w/index.php [L]
RewriteRule ^/?$ %DOCUMENT_ROOT/w/index.php [L]

第二部分为 mediawiki 制作漂亮的 URL。我尝试了很多很多变化,但我根本无法让它工作。非常感谢任何帮助。

更新:使用给定解决方案的日志文件。 .phtml 是什么?

[24/Jan/2013:22:01:00 +0000]  init rewrite engine with requested uri /wiki/Aaron_Swartz
[24/Jan/2013:22:01:00 +0000] (1) pass through /wiki/Aaron_Swartz
[24/Jan/2013:22:01:00 +0000] (1) [perdir /var/www/] pass through /var/www/w/wiki.phtml
[24/Jan/2013:22:01:00 +0000] (3) [perdir /var/www/] add path info postfix: /var/www/w/wiki.phtml -> /var/www/w/wiki.phtml/Aaron_Swartz
[24/Jan/2013:22:01:00 +0000] (3) [perdir /var/www/] strip per-dir prefix: /var/www/w/wiki.phtml/Aaron_Swartz -> w/wiki.phtml/Aaron_Swartz
[24/Jan/2013:22:01:00 +0000] (3) [perdir /var/www/] applying pattern '^wiki/Aaron_Swartz$' to uri 'w/wiki.phtml/Aaron_Swartz'
[24/Jan/2013:22:01:00 +0000] (3) [perdir /var/www/] add path info postfix: /var/www/w/wiki.phtml -> /var/www/w/wiki.phtml/Aaron_Swartz
[24/Jan/2013:22:01:00 +0000] (3) [perdir /var/www/] strip per-dir prefix: /var/www/w/wiki.phtml/Aaron_Swartz -> w/wiki.phtml/Aaron_Swartz
[24/Jan/2013:22:01:00 +0000] (3) [perdir /var/www/] applying pattern '^w/index\.php$' to uri 'w/wiki.phtml/Aaron_Swartz'
[24/Jan/2013:22:01:00 +0000] (1) [perdir /var/www/] pass through /var/www/w/wiki.phtml

【问题讨论】:

【参考方案1】:

请记住,像 RewriteRule 这样的 Apache 指令在 MediaWiki 看到请求之前就已应用。因此,您当前的规则应该适用于http://wecheck.org/w/index.php?title=Aaron_Swartz,但不适用于http://wecheck.org/wiki/Aaron_Swartz。

但实际上,该规则不起作用,因为您的正则表达式以 / 开头,但在 .htaccess 上下文中,在重写规则之前删除了前导斜杠(或您设置的任何 RewriteBase)已申请。

因此,解决这两个问题,您需要的是这样的:

Options +FollowSymlinks
RewriteEngine On
RewriteBase /

# match the short URL of the page:
RewriteRule ^wiki/Aaron_Swartz$ http://newslines.org/wiki/category/computer-people/aaron-swartz/ [R=301,L]

# optional: also match the long version of the URL:
RewriteCond %QUERY_STRING ^title=Aaron_Swartz$
RewriteRule ^w/index\.php$ http://newslines.org/wiki/category/computer-people/aaron-swartz/ [R=301,L]

编辑:根据您的日志文件,您的网络服务器根目录中似乎有一个 wiki.phtml 文件,Apache 会自动解析以 /wiki/ 开头的任何 URL 路径。 p>

一种解决方法是将您的重写规则移动到主 Apache 配置中,在完成任何此类映射之前它们将在其中运行;另一种更直接的方法是将上面的第一个重写规则更改为:

# match the short URL of the page:
RewriteRule ^wiki\.phtml/Aaron_Swartz$ http://newslines.org/wiki/category/computer-people/aaron-swartz/ [R=301,L]

甚至:

# match the short URL of the page:
RewriteRule ^wiki(\.phtml)?/Aaron_Swartz$ http://newslines.org/wiki/category/computer-people/aaron-swartz/ [R=301,L]

【讨论】:

我试过这段代码,但是当我转到wecheck.org/wiki/Aaron_Swartz 时,页面没有重定向。同样奇怪的是,当我注释掉漂亮的 url 行并且只使用您提供的代码时,它们仍然出现。是否缺少某种缓存(我已禁用所有可以找到的 mediawiki 缓存,并以隐身模式访问该页面)。 这很奇怪。看起来您在 Amazon EC2 上,所以大概您正在运行自己的网络服务器,而不是使用共享主机;也许有一个全局 Apache 配置文件覆盖了您的 .htaccess? 我还在虚拟主机目录中将“AllowOverride None”更改为“AllowOverride All”,但仍然没有。 是的,它在 EC2 上,但我认为没有全局 Apache 配置。它似乎只有标准配置文件。所有服务器配置都在一个名为 apache2.conf 以及 ports.conf 和 sites-enabled.conf 的文件中 我终于设法得到了一个日志文件。我已将其发布在原始问题中。日志文件仅使用来自 iimari Karonen 的代码,不包含漂亮的 URL 重写代码,该代码已禁用。

以上是关于Mediawiki 重写到外部站点的主要内容,如果未能解决你的问题,请参考以下文章

.htaccess 将子域重定向到外部 URL

WordPress MediaWiki 集成

MediaWiki:如何获取用户最近编辑的 N 篇文章?

.htaccess 用 WordPress 插件重写

Wordpress、Discuz、KingCMS、MediaWiki各适合建啥样的站?

迁移到新主机后,Joomla 站点 URL 重写不起作用