从Mediawiki URL中删除index.php的问题

时间:2015-06-02 13:06:44

标签: php apache .htaccess mediawiki

我有一个php网站(laravel),它使用虚拟主机设置为子域的根目录。所以http://subdomain.website.com将进入laravel网站。我希望能够转到http://subdomain.website.com/wiki,它将指向mediawiki安装。要执行此操作,请在虚拟主机中设置别名。

<VirtualHost *:80>
    DocumentRoot "/var/www/laravel/public"
    ServerName sub.domain.com
    Alias /wiki "/var/www/mediawiki" 
    Alias /w "/var/www/mediawiki" 
   <Directory "/var/www/laravel/public"> 
        AllowOverride All
        Options +FollowSymLinks
        RewriteEngine On
    </Directory>
</VirtualHost>

这正是我希望它工作的方式,但是有一个问题。我想从网址中删除index.php。因此“/wiki/index.php/Main_Page”变为“/ wiki / Main_Page”。

我尝试使用我在其他指南中找到的http://shorturls.redwerks.org/,但它并不适用于我。生成的任何代码都会生成wiki / wiki / Main_page,甚至会在页面上抛出错误。

  

在此服务器上找不到请求的URL / wiki / wiki / Main_Page。

我已经尝试过使用url进行大量不同的组合,并且无法使其正常工作。由于此网站是子域名,因此无法使用wiki.domain.com。这个wiki需要成为子域的一部分。任何人都知道我需要做些什么来使这项工作?

我需要的最终结果是将此网址带到主页

  

http://sub.domain.com/wiki/Main_Page

1 个答案:

答案 0 :(得分:2)

您需要启用mod_rewrite,然后您可以使用这样的规则来删除index.php。您可以在Wiki文件夹中的.htaccess中使用它。

RewriteEngine On
RewriteBase /wiki
#redirect index.php to non index.php
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\ /(.*)index\.php
RewriteRule ^ %1? [R=301,L]
#internally rewrite request to index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]

更新:通常这适用于典型的CMS'但是,由于使用wikiw文件夹,mediawiki本身具有独特性。

http://www.mediawiki.org/wiki/Manual%3aShort_URL/Apache

根据所选的mediawiki结构,它需要一个像

这样的规则
RewriteRule ^/?wiki(/.*)?$ %{DOCUMENT_ROOT}/w/index.php [L]