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 重写到外部站点的主要内容,如果未能解决你的问题,请参考以下文章