我有一个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>
这正是我想要它工作的方式,但是有一个问题。我想从url中删除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需要成为子域的一部分。有人知道我要怎么做才能成功吗?
我需要的最终结果是这个URL带我到主页
http://sub.domain.com/wiki/Main_Page
您需要启用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,但mediawiki本身有一个独特的,因为使用wiki
和w
文件夹。
根据所选择的mediawiki结构,它将需要如下规则
RewriteRule ^/?wiki(/.*)?$ %{DOCUMENT_ROOT}/w/index.php [L]