Cgit и Nginx переписывают URL

Проблемы переписывания проводных URL

пока я иду

http://git.example.org/foo

все работает нормально, репозитории обнаруживаются. Однако ссылки на этой странице добавляются / foo снова, т.е.

http://git.example.org/foo/foo/commit

Когда я иду на URL, как

http://git.example.org/foo/commit?id=123123

Это работает, но каждая ссылка на этой странице выглядит

http://git.example.org/foo/commit/foo/snapshot/foo/4f0be51d35fe3160a9122894723b69df69a6fb7e.zip?id=4f0be51d35fe3160a9122894723b69df69a6fb7e

Вот мой nginx.conf, я что-то пропустил?

server {
    listen 80;
    server_name git.example.org;
    root /var/www/htdocs/cgit;
    index cgit.cgi;

    location ~* ^.+\.(css|png|ico)$ {
        expires 30d;
    }

    if ($request_filename = cgit.cgi){
        rewrite ^/([^/]+/.*)$ /cgit.cgi?url=$1 last;
    }

    location / {
        try_files $uri @cgit;
    }

    location @cgit {
        fastcgi_pass unix:/var/run/fcgiwrap.socket;
        fastcgi_param SCRIPT_FILENAME $document_root/cgit.cgi;
        fastcgi_param HTTP_HOST $server_name;
        fastcgi_param PATH_INFO $uri;
        include fastcgi_params;

    }
    access_log /var/log/nginx/cgit_access.log;
    error_log /var/log/nginx/cgit_error.log warn;
}

Обновление, решено

это настройка cgit для virtual-root = / И я тоже обновил свой nginx.conf, теперь перезапись URL работает!!

server {
        listen 80;
        server_name git.mengzhuo.org;
        root /var/www/htdocs/cgit;

        location ~* ^.+\.(css|png|ico)$ {
                expires 30d;
        }


        location / {
                index cgit.cgi;
                fastcgi_param SCRIPT_FILENAME $document_root/cgit.cgi;
                fastcgi_pass unix:/var/run/fcgiwrap.socket;
                fastcgi_param HTTP_HOST $server_name;
                fastcgi_param PATH_INFO $uri;
                fastcgi_param QUERY_INFO $uri;
                include "fastcgi_params";

        }
        access_log /var/log/nginx/cgit_access.log;
        error_log /var/log/nginx/cgit_error.log warn;
}

2 ответа

Решение

Это не имеет ничего общего с Nginx, в коде, генерирующем ваши URL, есть ошибка.

На странице http://git.example.org/foo вас есть ссылка, написанная как:

<a href="foo/commit">Click to commit</a>

Он должен быть абсолютным для сервера, так как:

<a href="/foo/commit">Click to commit</a>

Или относительно текущего каталога как:

<a href="commit">Click to commit</a>

Предположительно где-то в коде, где вы инициализируете CGIT, вы вставляете в foo где вы должны проходить в /foo,

Настройка virtual-root=/ в /etc/cgitrc исправил проблему для меня.

Другие вопросы по тегам