Назад | Перейти на главную страницу

nginx rewrite для wikkawiki

Просто установите WikkaWiki на моем сервере, я пытался получить ссылки с wiki.mysite.info/wikka.php?wakka=Start в wiki.mysite.info/DotMG.

Я пробовал следовать их руководству на http://docs.wikkawiki.org/ModRewrite, однако он кажется неполным и устаревшим. Кроме того, в версии 1.3.2 base_url даже не настраивается вручную из wikka.config.php файл.

Я использую версию 1.3.2 из WikkaWiki. Мой файл виртуальных хостов nginx содержит:

server {
    listen 80;

    server_name wiki.mysite.info;

    root /usr/share/nginx/wikka/;

    access_log /usr/share/nginx/.access/wikka;
    error_log /usr/share/nginx/.error/wikka error;

    location / {
            index index.php;
            try_files $uri $uri/ @wikka;
    }

    location @wikka {
            rewrite ^(.*/[^\./]*[^/])$ $1/ last;
            rewrite ^(.*)$ /wikka.php?wakka=$1 last;
    }

    location ~* \.php$ {
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            include /etc/nginx/fastcgi_params;
    }
}

Пока это работает, я могу перейти к wiki.mysite.info/APage и он отобразит эту страницу, однако он работает не на всех страницах, иногда браузер просто загружает страницу (по какой-то причине он всегда загружает Start страница).

Также когда я иду в wiki.mysite.info/ он загружает wikka.php файл...

Кроме того, ссылки в вики имеют wikka.php?wakka= поэтому всякий раз, когда я перемещаюсь по вики, он снова становится wiki.mysite.info/wikka.php?wakka=APage.

Я думаю что-то не так с моим rewrite но точно сказать не могу.

Содержание fastcgi_params:

fastcgi_param   QUERY_STRING            $query_string;
fastcgi_param   REQUEST_METHOD          $request_method;
fastcgi_param   CONTENT_TYPE            $content_type;
fastcgi_param   CONTENT_LENGTH          $content_length;

fastcgi_param   SCRIPT_FILENAME         $request_filename;
fastcgi_param   SCRIPT_NAME             $fastcgi_script_name;
fastcgi_param   REQUEST_URI             $request_uri;
fastcgi_param   DOCUMENT_URI            $document_uri;
fastcgi_param   DOCUMENT_ROOT           $document_root;
fastcgi_param   SERVER_PROTOCOL         $server_protocol;

fastcgi_param   GATEWAY_INTERFACE       CGI/1.1;
fastcgi_param   SERVER_SOFTWARE         nginx/$nginx_version;

fastcgi_param   REMOTE_ADDR             $remote_addr;
fastcgi_param   REMOTE_PORT             $remote_port;
fastcgi_param   SERVER_ADDR             $server_addr;
fastcgi_param   SERVER_PORT             $server_port;
fastcgi_param   SERVER_NAME             $server_name;

fastcgi_param   HTTPS                   $server_https;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param   REDIRECT_STATUS         200;

Я только что закончил перенос старой установки Wikka на 1.3.5 и с Apache на Nginx / php-fpm.

Для справки вот мое определение vhost с соответствующими правилами перезаписи:

server {
    listen      80;
    server_name wiki.domain.com;

    root        /var/www/wiki.domain.com;

    access_log  /var/log/nginx/wiki.domain.com.access.log;
    error_log   /var/log/nginx/wiki.domain.com.error.log;

    location / {
        index       wikka.php;
        try_files   $uri $uri/ @wikka;
    }

    location @wikka {
        rewrite (.*)    /wikka.php?wakka=$1;
    }

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

Я пришел сюда через Google, и, несмотря на то, что мне пришлось самому найти решение, и даже этой теме больше года, я думаю, что мне нужно опубликовать здесь свое решение для других людей, привлеченных сюда поисковой системой.

Я думаю, что в nginx переписывание местоположения @wikka, выполненное try_files, сокращает вызов блока location ~ \.php

Повторное копирование всего изнутри блока location ~ \.php в location @wikka решил проблему для меня. Еще http://blog.dot.mg/?t=20

Измените эту строку:

fastcgi_param   SCRIPT_FILENAME         $request_filename;

кому:

fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;

и попробуй еще раз.