美国主机Lunarpages

Mediawiki中文技术论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12088|回复: 0

[技术文档] 从网址中去除index.php

[复制链接]
发表于 2010-12-25 16:54:59 | 显示全部楼层 |阅读模式
BlueHost主机优惠码
下述方法可在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文件中,确认你正在使用如下参数:

  1. $wgScriptPath = "/w";
  2. $wgScript = "$wgScriptPath/index.php"
复制代码

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

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

  1. $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文件

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

  1. LoadModule rewrite_module modules/mod_rewrite.so
复制代码
Image: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 :

  1.                 DirectoryIndex wiki

  2.                 php_flag register_globals off

  3.                 <Files "wiki">

  4.                         ForceType application/x-httpd-php
  5.                         Allow from all

  6.                 </Files>

  7.                 <Files "wikiredirect">

  8.                         ForceType application/x-httpd-php
  9.                         Allow from all

  10.                 </Files>
复制代码
生成wiki文件(不要扩展名,在根路径下):

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

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

再一种方法,不使用mod_rewrite

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

  1. <FilesMatch "^wiki$">
  2.     ForceType application/x-httpd-php
  3. </FilesMatch>
复制代码
当然,你也必须在LocalSettings.php中设置

  1. $wgScript = "$wgScriptPath/wiki";
复制代码

上述方法的扩展(不使用mod_rewrite)

在根.htaccess文件中加入:

  1. <Files ~ (wiki|redirect)>
  2.         ForceType application/x-httpd-php
  3. </Files>
  4. DirectoryIndex wiki
复制代码

然后在LocalSettings.php中将下面的:

  1. $wgScript           = "$wgScriptPath/index.php";
  2. $wgRedirectScript   = "$wgScriptPath/redirect.php";
复制代码
改为:

  1. $wgScript           = "$wgScriptPath/wiki";
  2. $wgRedirectScript   = "$wgScriptPath/redirect";
复制代码

接下来只需要将index.php和redirect.php改个名字

  1. $ mv index.php wiki
  2. $ 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文件。通常会有些关于原因的线索。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

BlueHost美国主机优惠码

手机版|小黑屋|Archiver|Mediawiki中文技术论坛  

GMT+8, 2020-4-6 02:38 , Processed in 0.109814 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2020 Comsenz Inc.

快速回复 返回顶部 返回列表