使用Nginx的Mediawiki的短URL


Using short URLs for Mediawiki with Nginx

>老实说 - 我是使用Nginx的新手,但它似乎很简单。我刚刚在我的服务器上安装了一个Mediawiki,应用了数据库等,它已经启动并运行在http://wiki.rebirthgaming.org/index.php?title=Main_Page

不过,我想使用短网址。我已经使用redwerks工具来构建我的nginx配置,并将更改应用于LocalSettings.php。nginx.conf设置有效 - 该网站现在正在使用这些设置运行。但是,当我将这些设置添加到本地设置.php时,我得到 404

我添加的 404 的本地设置是:

$wgArticlePath      = "/$1";
$wgUsePathInfo      = true;
$wgScriptExtension  = ".php";
$wgGenerateThumbnailOnParse = false;

我的nginx.conf如下:

server {
   listen 80;
   server_name wiki.rebirthgaming.org;
   root /var/www/wiki.rebirthgaming.org;
   index index.php;
    location / {
        try_files $uri $uri/ wiki.rebirthgaming.org;
        # Do this inside of a location so it can be negated
        location ~ '.php$ {
            try_files $uri $uri/ =404; # Don't let php execute non-existent php files
            include /etc/nginx/fastcgi_params;
            fastcgi_pass 127.0.0.1:9000;
        }
    }
    location /images {
        # Separate location for images/ so .php execution won't apply
        location ~ ^/images/thumb/(archive/)?[0-9a-f]/[0-9a-f][0-9a-f]/([^/]+)/([0-9]+)px-.*$ {
            # Thumbnail handler for MediaWiki
            # This location only matches on a thumbnail's url
            # If the file does not exist we use @thumb to run the thumb.php script
            try_files $uri $uri/ @thumb;
        }
    }
    location /images/deleted {
        # Deny access to deleted images folder
        deny    all;
    }
    # Deny access to folders MediaWiki has a .htaccess deny in
    location /cache       { deny all; }
    location /languages   { deny all; }
    location /maintenance { deny all; }
    location /serialized  { deny all; }
    # Just in case, hide .svn and .git too
    location ~ /.(svn|git)(/|$) { deny all; }
    # Hide any .htaccess files
    location ~ /.ht { deny all; }
    # Uncomment the following code if you wish to hide the installer/updater
    ## Deny access to the installer
    #location /mw-config { deny all; }
    # Handling for the article path
    location wiki.rebirthgaming.org {
        include /etc/nginx/fastcgi_params;
        # article path should always be passed to index.php
        fastcgi_param SCRIPT_FILENAME   $document_root/index.php;
        fastcgi_pass  127.0.0.1:9000;
    }
    # Thumbnail 404 handler, only called by try_files when a thumbnail does not exist
    location @thumb {
        # Do a rewrite here so that thumb.php gets the correct arguments
        rewrite ^/images/thumb/[0-9a-f]/[0-9a-f][0-9a-f]/([^/]+)/([0-9]+)px-.*$ /thumb.php?f=$1&width=$2;
        rewrite ^/images/thumb/archive/[0-9a-f]/[0-9a-f][0-9a-f]/([^/]+)/([0-9]+)px-.*$ /thumb.php?f=$1&width=$2&archived=1;
        # Run the thumb.php script
        include /etc/nginx/fastcgi_params;
        fastcgi_param SCRIPT_FILENAME   $document_root/thumb.php;
        fastcgi_pass  127.0.0.1:9000;
    }
 }  

}

我希望我的网址看起来像这样:wiki.rebirthgaming.org/Main_Page

我一直在试图解决这个问题,尝试不同的设置等,但在进行本地设置更改时总是失败。

我认为您实际上需要在位置块内编写重写规则。作为参考,这是我所拥有的内容的缩写版本:

server {
   location / {
        try_files $uri $uri/ @mediawiki;
   }

   location @mediawiki {
         rewrite ^/([^?]*)(?:'?(.*))? /index.php?title=$1&$2 last;
   }
}