Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MediaWiki File Not Found with File:example.jpg when using short urls

Tags:

I am trying to set up a wiki using Nginx.

When I use /wiki/File:image.jpg Nginx returns 404.
When I use /index.php?title=File:image.jpg it works correctly.

server {
    listen 80;
    listen [::]:80 ipv6only=on;

    root /usr/share/nginx/mediawiki;
    index index.php index.html index.htm;

    ...

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

    location ~* /wiki/images/.*.(html|htm|shtml|php)$ {
        types { }
        default_type text/plain;
    }

    location ~* /wikiimages/ {
        try_files $uri /wiki/index.php;
    }

    location ~* \.(js|css|jpg|jpeg|png|gif|ico)$ {
        try_files $uri /wiki/index.php;
        expires max;
        log_not_found off;
    }

    location ~*\.php?$ {
        try_files $uri =404;
    #   # With php5-fpm:
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_intercept_errors on;
        include fastcgi_params;
    }

    location /wiki/.*\.php?$ {
        try_files $uri =404;
    #   # With php5-fpm:
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_intercept_errors on;
        include fastcgi_params;
    }
}
like image 428
James Fenwick Avatar asked Apr 05 '16 15:04

James Fenwick


1 Answers

Change error_log level to debug + add rewrite log. Something like:

error_log /var/log/nginx/error.log debug;
rewrite_log on;

For testing, please look here: https://gist.github.com/jmervine/8943627 - there is sample config, that allows you to automate testing. With full logs you can get the problem.

I've got something like this:

2016/04/21 13:02:10 [debug] 7566#7566: *1 http script regex: "^/wiki/([^?]*)(?:\?(.*))?"
2016/04/21 13:02:10 [notice] 7566#7566: *1 "^/wiki/([^?]*)(?:\?(.*))?" matches "/wiki/File:test.jpg", client: 127.0.0.1, server: , request: "GET /wiki/File:test.jpg HTTP/1.1", host: "localhost"
2016/04/21 13:02:10 [debug] 7566#7566: *1 http script copy: "/index.php"
2016/04/21 13:02:10 [debug] 7566#7566: *1 http script args
2016/04/21 13:02:10 [debug] 7566#7566: *1 http script copy: "title="
2016/04/21 13:02:10 [debug] 7566#7566: *1 http script capture: "File:test.jpg"
2016/04/21 13:02:10 [debug] 7566#7566: *1 http script copy: "&"
2016/04/21 13:02:10 [debug] 7566#7566: *1 http script capture: ""
2016/04/21 13:02:10 [debug] 7566#7566: *1 http script regex end
2016/04/21 13:02:10 [notice] 7566#7566: *1 rewritten data: "/index.php", args: "title=File:test.jpg&", client: 127.0.0.1, server: _, request: "GET /wiki/File:test.jpg HTTP/1.1", host: "localhost"

Looks like your regex can be better... I'll try to find something better later today.

like image 80
Michał Zaborowski Avatar answered Sep 28 '22 02:09

Michał Zaborowski