【发布时间】: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