【问题标题】:Mediawiki Subdirectory InstallationMediawiki 子目录安装
【发布时间】:2012-01-14 06:43:59
【问题描述】:

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

好的,我正在尝试将 MediaWiki 配置为安装到子目录。我之前已将它安装到 http://www.example.com/ 上的主域,并使用一个 mod_rewrite 使用 /wiki/Main_Title 的短 URL。

请注意,我也在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 - url http://www.example.com/。就好像什么事都没有做一样。我把头撞在墙上试图弄清楚这一点。任何帮助表示赞赏。

提前致谢!

【问题讨论】:

标签: apache mod-rewrite mediawiki subdirectory


【解决方案1】:

目的是什么

RewriteRule ^(.*)\&(.*)$ $1\%26$2

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

如果您阅读了 Rewrite 文档:

匹配的是什么?

...如果您希望匹配 ... 查询字符串,请使用带有 ...%{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 可能会混淆。

这应该可以正常工作:-)

【讨论】:

  • 该行的目的来自 Mediawiki 的 Wiki,用于 HostGator 上的 ShortURL 配置。
  • @Zack,它可能在 Choshi 2009 年的编辑中,但它并没有使它有效。请参阅 MW 讨论页。这没有意义,因为 & 是 QUERY_STRING 的一部分,并且引擎将其从模式中剥离出来。你永远不会在 RewriteRule 中匹配 \&。我已经更新了我的帖子。
【解决方案2】:

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

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

我最喜欢的检查正则表达式的工具:

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

【讨论】:

  • 我在一个具有 cPanel 和 FTP 访问权限的共享主机环境中。我在哪里可以访问这些日志? O.o
  • 我去了here 并尝试了.htaccess 解决方案来启用重写日志,但我得到了500 ISE:/
  • 如果您在共享主机上,则无法启用日志,否则您将获得 500。您可以尝试在本地安装它吗,在您自己的 PC 上,尝试制作一个虚拟主机并应用你需要的一切,直到它起作用?否则可能很难找到错误的确切位置......
  • 更新了我的答案。希望这会有所帮助!
  • 似乎不起作用:(我想到的一个解决方案是使用两次重写(每个目录中的一次),其中根 (/) 重写为 /wiki/ 和 @ 987654330@ 重写了 mediawiki。我希望这有意义吗?
【解决方案3】:

我的 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]

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-13
      • 1970-01-01
      • 2023-03-10
      • 2016-04-25
      • 2014-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多