Mediawiki子目录安装

时间:2012-01-14 06:43:59

标签: apache mod-rewrite mediawiki subdirectory

  

可能重复: MediaWiki on SubDirectory and SubDomain(但没有答案,也没有任何回复提供帮助)

好吧,我正在尝试将MediaWiki配置为安装到子目录。我以前使用短网址为/wiki/Main_Title的mod_rewrite将其安装到http://www.example.com/上的主域中。

作为备注,我也在HostGator共享托管,其中special rules为简短网址。

我的目录结构是这样的:

  • / (site root; location of .htaccess)
  • /wiki/ (mediawiki root; location of LocalSettings.php)

这是我试过的,

.htaccess

RewriteEngine on
RewriteBase /
RewriteRule ^(.*)\&(.*)$ $1\%26$2
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^wiki/(.+)$ ./wiki/index.php?title=$1 [PT,L,QSA]

/wiki/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       = "/wiki";
$wgScriptExtension  = ".php";
$wgArticlePath      = "$wgScriptPath/$1";

然而,我什么都没得到。我只是得到403/Forbidden错误;没有500 Internal Server Error,只有403 - 网址http://www.example.com/ 。就好像什么都没做完。我试图想出这个问题,把头撞在了墙上。任何帮助表示赞赏。

提前致谢!

4 个答案:

答案 0 :(得分:1)

的目的是什么?
RewriteRule ^(.*)\&(.*)$ $1\%26$2

你完全失去了我。具有第二个参数的任何URI将无限循环并生成500状态返回。

如果您阅读了重写文档:

  

匹配什么?

     

...如果您希望与...查询字符串匹配,请使用带有... %{QUERY_STRING}变量的RewriteCond

&通常是查询参数的一部分。在格式错误的URI(例如fred&q=1)的情况下,它可以出现在RewriteRule模式中。默认情况下,mod_rewrite会将其视为fred?q=1,但这会将其转换为转义的%26变体,因此这将作为标题fred&q=1传递给MW(顺便说一下,这是一个无效的MW标题) 。我认为你应该摆脱它,或者至少理解你在这里想做什么。

最后一行应该是

RewriteRule ^wiki/(.+) wiki/index.php?title=$1 [PT,L,QSA]

并保持RewriteBase否则mod_rewrite可能会混淆。

这应该可行: - )

答案 1 :(得分:0)

你走在正确的轨道上......如果你在共享环境中,那么试试这个:

RewriteEngine on
# Comment to force base to be the subdir:
# RewriteBase /
RewriteRule ^(.*)\&(.*)$ $1\%26$2
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^wiki/(.+)$ ./wiki/index.php?title=$1 [PT,L,QSA]

两个提示:

如果您不在托管环境中(=如果它是您自己的服务器并且您可以修改虚拟主机,而不仅仅是.htaccess文件),请尝试使用RewriteLog指令:它帮助您追踪此类问题:

# Trace:
# (!) file gets big quickly, remove in prod environments:
RewriteLog "/web/logs/mywebsite.rewrite.log"
RewriteLogLevel 9
RewriteEngine On

我最喜欢检查regexp的工具:

http://www.quanetic.com/Regex(别忘了选择ereg(POSIX)而不是preg(PCRE)!)

答案 2 :(得分:0)

我的HostGator门票解决了这个问题,虽然没有帮助。我希望有一个 .htaccess解决方案,而不是双重.htaccess重定向/重写。但是,这是我的解决方案。

<强> /

RewriteEngine on
RewriteCond %{REQUEST_URI} ^/$
RewriteRule ^.*$ http://www.example.com/wiki/

<强> /wiki/

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?title=$1 [L,QSA]

答案 3 :(得分:0)

我尝试了不同的解决方案,对我有用的是将media.hiki子文件夹中的.htaccess更改为

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /wikifolder/index.php [L]
</IfModule>