1

我正在将我的网站从 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
4

1 回答 1

1

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

但实际上,该规则不起作用,因为您的正则表达式以 a 开头,但在 .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 会自动将任何以 . 开头的 URL 路径解析到该文件/wiki/

一种解决方法是将重写规则移动到主 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]
于 2013-01-24T15:09:24.280 回答