Cgit и Nginx переписывают URL
Проблемы переписывания проводных URL
пока я иду
все работает нормально, репозитории обнаруживаются. Однако ссылки на этой странице добавляются / foo снова, т.е.
Когда я иду на 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 для 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 исправил проблему для меня.