Cgit和Nginx URL重写

Cgit和Nginx URL重写,nginx,cgit,Nginx,Cgit,有线URL重写问题 当我去 它运行良好,回购协议出现了。但是,该页面上的链接再次添加了/foo i、 e 当我转到URL时,就像 它可以工作,但该页面上的每个链接看起来像 这是我的nginx.conf,我错过了什么吗 server { listen 80; server_name git.example.org; root /var/www/htdocs/cgit; index cgit.cgi; location ~* ^.+\.(css|pn

有线URL重写问题

当我去

它运行良好,回购协议出现了。但是,该页面上的链接再次添加了/foo i、 e

当我转到URL时,就像

它可以工作,但该页面上的每个链接看起来像

这是我的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设置=/ 我也更新了我的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;
}

这与Nginx无关,生成URL的代码中有一个bug

页面上有一个链接,写为:

<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

在/etc/cgitc中设置
虚拟根=/
为我解决了这个问题。

我已经通过在cgit中设置虚拟根=/解决了这个问题,现在一切正常。