wangsisi 发表于 2010-12-25 16:54:59

从网址中去除index.php

下述方法可在mediawiki中获得“www.allwiki.com/wiki/文章名称”式的链接效果,而不是一般站点常见的“.../index.php?文章名称”形式。

请在实际操作中,把www.allwiki.com和/filesystem/path/to/my/site替换为自己站点的字串。
使用httpd.conf的别名功能

从效率而言,这种方法最值得推荐,但需要访问并修改httpd.conf文件。但不幸的是,虚拟主机环境下往往不具备这种操作权限。本方法在MediaWiki 1.4.4下测试通过。

1. 在LocalSettings.php文件中,确认你正在使用如下参数:

$wgScriptPath = "/w";
$wgScript = "$wgScriptPath/index.php"
如果你的wiki安装在一个目录下,例如/w,设定$wgScriptPath = "/w"是正确的。如果你把文件(例如index.php)放在根目录下,你的设置应该是$wgScriptPath = "";。

2. 在LocalSettings.php中进行如下修改:

$wgArticlePath = "/wiki/$1";注意:为wiki文章设置的虚拟路径永远也不要覆盖或隐藏真正的文件,特别是你的安装目录或根目录。可以轩辕一个虚拟目录,例如/wiki。 (举例:不要试图让/wiki/Article指向真正的/wiki/index.php?title=Article)。

3. 在你Apache环境的httpd.conf文件中设定如下别名。可以在<VirtualHost>或通用站点设定段落中进行设置。在这个别名中,前缀/filesystem/path/to/my/site代表你的安装路径——即MediaWiki的index.php文件所在的路径。请将前缀替换为拟使用的实际路径。

#这些必须放在最后,并保持如下次序!
Alias /wiki /filesystem/path/to/my/site/index.php
Alias /index.php /filesystem/path/to/my/site/index.php

修改httpd.conf之后,你可能需要重启Apache以使改动生效。

如果你使用的是Apache 2, 你可能还需要打开AcceptPathInfo。标准Apache和PHP安装中,这个设定是打开的,但有些发行包也可能关闭了它。

利用.htaccess文件的rewrite rule功能

对于没有权限修改conf文件、却能修改.htaccess文件的rewrite rule的用户,以下方法可以同样达到目的,但比修改httpd麻烦。

   1. 将mediawiki安装到www.allwiki.com/w之类的目录(根目录也可。但不可使用/wiki目录,否则冲突)
   2. 在LocalSettings.php中设置$wgArticlePath = "/wiki/$1";
   3. 在根目录中放置含有如下内容的.htaccess文件

RewriteEngine on
# 取消下一行的注释#号,如果你期望输入主域名www.allwiki.com/时直接转到www.allwiki.com/wiki/Main_Page
# RewriteRule ^/$ /wiki/Main_Page
RewriteRule ^wiki/(.*)$ /w/index.php?title=$1 * 请(向空间服务商)确认.htaccess功能确已打开,否则无法实现正常完成本功能
    * 请(向空间服务商)确认Apache装载了Rewrite模块。其具体操作为——在httpd.conf中,必须添加下面一行或将其取消注释:

LoadModule rewrite_module modules/mod_rewrite.soImage:Allwiki notice.png天下维客提示:本方法经www.allwiki.com 验证通过,但网页访问速度约有30%降低(据说alias效率会更高,但allwiki未验证)

进一步提示

    * 如果发现LocalSettings.php中的$wgArticlePath改变后,访问网页却仍然不是“.../wiki/...”形式,则首先Ctrl-F5强制刷新浏览器。如果还不行,有可能是MediaWiki的缓冲机制中记忆了以前设定中的链接。输入“.../wiki/Main_Page?action=purge”以强制MediaWiki重建缓冲链接,或执行MySQL查询"DELETE FROM objectcache;",或者设置$wgCacheEpoch为当前日期。

    * 如果你并未遵循上述指示,而是把MediaWiki安装到了/wiki目录下,则你需要将其移动到其他路径,例如"w"。你将需要改变LocalSettings.php中很多路径(例如$IP)为新的位置。


另一种方法,不使用mod_rewrite

说明:本方法使用单独的php文件(以及includes),这可能比源文件改名还容易。

      修改你的.htaccess :

                DirectoryIndex wiki

                php_flag register_globals off

                <Files "wiki">

                        ForceType application/x-httpd-php
                        Allow from all

                </Files>

                <Files "wikiredirect">

                        ForceType application/x-httpd-php
                        Allow from all

                </Files>
生成wiki文件(不要扩展名,在根路径下):

                <?php include_once('index.php');?> 生成wikiredirect文件(不要扩展名,在根路径下):

                <?php include_once('redirect.php');?>
这个方案可能比mod_rewrite更快

再一种方法,不使用mod_rewrite

根据apache的运行方式,在根目录下的.htaccess文件中写下如下内容也能成功:

<FilesMatch "^wiki$">
    ForceType application/x-httpd-php
</FilesMatch>
当然,你也必须在LocalSettings.php中设置

$wgScript = "$wgScriptPath/wiki";
上述方法的扩展(不使用mod_rewrite)

在根.htaccess文件中加入:

<Files ~ (wiki|redirect)>
      ForceType application/x-httpd-php
</Files>
DirectoryIndex wiki
然后在LocalSettings.php中将下面的:

$wgScript         = "$wgScriptPath/index.php";
$wgRedirectScript   = "$wgScriptPath/redirect.php";改为:

$wgScript         = "$wgScriptPath/wiki";
$wgRedirectScript   = "$wgScriptPath/redirect";
接下来只需要将index.php和redirect.php改个名字

$ mv index.php wiki
$ mv redirect.php redirect
示范站点: http://dev.frozenonline.com/ (except I'm not using 'wiki')

...提醒一下,上述方法可能未必在新版中通过(1.4.5验证通过)

原理上,使用了Apache "找不到" 文件以获取wiki页面,利用标题(或为了重定向标题的一个名字)的absent URI,或者。详细介绍参见 here; 示例可尝试http://wiki.vbz.net/arbitrary_title

这并非一个完整的解决方案,因为还有点问题没有时间解决,并且还不知道与其他方案相比,CPU符合如何。

疑难解答

如果碰到internal server errors或类似问题,检查Apache的error.log文件。通常会有些关于原因的线索。
页: [1]
查看完整版本: 从网址中去除index.php

美国HostEase虚拟主机一年198元