【问题标题】:Unable to get Mediawiki .htaccess Short URL to work: [closed]无法使 Mediawiki .htaccess 短 URL 工作:[关闭]
【发布时间】:2013-09-16 13:50:19
【问题描述】:

我有这样的 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?title=XYZ&action=编辑。为什么不把所有的url都转成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 等。我怎样才能得到相同的结果?

【问题讨论】:

    标签: .htaccess mod-rewrite rewrite mediawiki


    【解决方案1】:

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

    即使启用了上述规则,当我访问的页面不是 主要文章页面,例如编辑页面或查看历史记录等。它仍然 将 url 显示为 mysite.com/w/index.php?title=XYZ&action=edit。为什么 它不会将所有网址都转换为 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。

    所以基本上重写规则并没有完全重写所有页面。它 仅通过删除 index.php/ 重写主文章页面 url 从 url 并将 w 更改为 wiki。但其他 urls 类型仍然是 相同,不会重写。

    后来我发现它应该是这样工作的。

    我还没有找到 1 和 2 的答案。我想我需要为此添加单独的重定向规则。我已经问了一个单独的问题来查找 htaccess 重写规则:How to redirect Mediawiki Short URL with no title to Main Page?

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

    更新:

    对于否:1,我只需要将重写规则移到其他重写规则之前的顶部,然后就可以了。更多信息:How to redirect Mediawiki Short URL with no title to Main Page?

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

    【讨论】:

      猜你喜欢
      • 2012-11-22
      • 1970-01-01
      • 2017-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-18
      相关资源
      最近更新 更多