2

我有这样的 mediawiki 设置:

mysite.com/w/

我正在尝试像这里的手册中建议的那样添加短 URL 方法:

https://www.mediawiki.org/wiki/Manual:Short_URL/Apache

我使用 redwerks 工具生成 .htaccess 重写规则:

http://shorturls.redwerks.org/

尽管我在具有 root 访问权限的 VPS 上,但我发现更改 Apache 配置和 Nginx 配置过于复杂并且超出了我的想象。所以我决定使用 htaccess 方法,但我无法让它完全工作。这是我在根路径中添加的 .htaccess 文件:

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

RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-d
RewriteRule ^/?w/images/thumb/[0-9a-f]/[0-9a-f][0-9a-f]/([^/]+)/([0-9]+)px-.*$ %{DOCUMENT_ROOT}/w/thumb.php?f=$1&width=$2 [L,QSA,B]

RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-d
RewriteRule ^/?w/images/thumb/archive/[0-9a-f]/[0-9a-f][0-9a-f]/([^/]+)/([0-9]+)px-.*$ %{DOCUMENT_ROOT}/w/thumb.php?f=$1&width=$2&archived=1 [L,QSA,B]

我将这些添加到 LocalSettings.php

## The URL base path to the directory containing the wiki;
## defaults for all runtime URL paths are based off of this.
## For more information on customizing the URLs please see:
## http://www.mediawiki.org/wiki/Manual:Short_URL
$wgScriptPath = "/w";
$wgScriptExtension = ".php";
$wgArticlePath = "/wiki/$1";

## To enable image uploads, make sure the 'images' directory
## is writable, then set this to true:
$wgEnableUploads  = true;

在上述之后,重定向排序工作。意思是,如果我访问 mysite.com/w/index.php/Page_Title,它会重定向到 mysite.com/wiki/Page_Title。但以下不起作用:

1) 当我输入 mysite.com/wiki 时,它找不到页面,也不会像以前输入 mysite.com/w/ 时那样自动转到主页。那么我需要为此添加单独的重写规则吗?

2) 当 url 看起来像这样时,我还收到一个未找到的页面并创建一个新的文章页面:mysite.com/wiki/index.php。在这种情况下,它试图创建一个 index.php 文章,而不是将我引导到主页。

3) 即使开启了上述规则,当我到达主文章页面以外的页面时,例如编辑页面或查看历史记录等。它仍然显示 url 为 mysite.com/w/index.php?标题=XYZ&动作=编辑。为什么不将所有网址转换为 wiki?

4) 如果一个 url 添加了一个 ?title,它不会被重定向到 wiki。比如这个页面mysite.com/w/index.php?title=Main Page,不会变成mysite.com/wiki/Main_Page

看到上面的内容后,现在我在想是否最好将我的 wiki 安装到 mysite.com/wiki/ 文件夹而不是 'w' 文件夹。事实上,这就是我最初拥有它的方式,但后来在我尝试实现短 URL 方法时更改了它,因为 MW 手册建议反对它。所以我需要一些关于如何解决这个问题的指导......

这些只是我目前注意到的一些问题。所以基本上重写规则并没有完全重写所有页面。它仅通过从 url 中删除 index.php/ 并将 w 更改为 wiki 来重写主要文章页面 url。但是其他的urls类型还是一样的,没有重写。当我检查 mediawiki 网站时,即使在编辑页面等时,他们的所有 url 都被重写为 /wiki/ 而没有 index.php 等。我怎样才能得到相同的结果?

4

1 回答 1

2

好的,在网上进一步搜索后,这是我发现的。

即使启用了上述规则,当我到达主文章页面以外的页面时,例如编辑页面或查看历史记录等。它仍然将 url 显示为 mysite.com/w/index.php?title= XYZ&action=编辑。为什么不将所有网址转换为 wiki?

这就是它应该如何工作的方式。所以这意味着主页面、命名空间页面和特殊页面将有这个短 url,而其他页面如编辑页面、历史记录等仍然会显示 w/index.php/......

如果一个 url 添加了一个 ?title,它不会被重定向到 wiki。比如这个页面mysite.com/w/index.php?title=Main Page,不会变成mysite.com/wiki/Main_Page

它只重写文章网址,我不应该在重写中包含 ?title=$1 或类似的东西。包含查询将导致 MediaWiki 的内置处理被覆盖,并且由于 Apache 的查询重写被破坏的事实,将在您的 wiki 上创建错误。这里的目标是为 /index.php 的路径设置别名,然后让 MediaWiki 自己根据 LocalSettings.php 中的配置来处理解析和路由 url。

所以基本上重写规则并没有完全重写所有页面。它仅通过从 url 中删除 index.php/ 并将 w 更改为 wiki 来重写主要文章页面 url。但是其他的urls类型还是一样的,没有重写。

后来我发现这就是它应该如何工作的。

我还没有找到 1 和 2 的答案。我想我需要为此添加一个单独的重定向规则。我已经问了一个单独的问题来查找 htaccess 重写规则:如何将没有标题的 Mediawiki 短 URL 重定向到主页?

一旦我得到这些答案,我会更新这个主题。

更新:

否:1,我只需要在其他重写规则之前将重写规则移到顶部,然后它就可以工作了。更多信息:如何将没有标题的 Mediawiki 短 URL 重定向到主页?

否: 2:wiki/index.php 不会被重定向到 wiki/Main_Page,因为它会将 index.php 视为新文章。它只会将 w/index.php 重定向到 /wiki/Main_Page

于 2013-09-17T07:15:17.050 回答