From: Tobias Girstmair Date: Sun, 12 Jul 2020 18:24:19 GMT Subject: [PATCH v2] gitweb: Replace tag with full URLs (when using PATH_INFO) Message-ID: <20200712182418.1696-1-tobi@isticktoit.net> In-Reply-To: <20200711203947.23520-1-tobi@isticktoit.net> using a base tag has the side-effect of not just changing the few URLs of gitweb's static resources, but all other relative links (e.g. those in a README.html), too. Signed-off-by: Tobias Girstmair --- In v1 of this patch I didn't think about already absolute URLs. Fixed. tobias gitweb/gitweb.perl | 36 ++++++++++++++++++++++-------------- 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl index 0959a78..6a4f2fa 100755 --- a/gitweb/gitweb.perl +++ b/gitweb/gitweb.perl @@ -1616,6 +1616,19 @@ sub esc_url { return $str; } +# the stylesheet, favicon etc urls won't work correctly with path_info +# unless we set the appropriate base URL. not using a tag to not +# also change relative URLs inserted by the user. +sub esc_url_base { + my $url = shift; + my $prefix = $ENV{'PATH_INFO'}? esc_url($base_url)."/" : ""; + if (url !~ m{^(https?:)?//?}) { + return $prefix . esc_url($url); + } else { + return esc_url($url); + } +} + # quote unsafe characters in HTML attributes sub esc_attr { @@ -2232,7 +2245,7 @@ sub git_get_avatar { return $pre_white . "" . $post_white; } else { @@ -4099,17 +4112,17 @@ sub print_header_links { # print out each stylesheet that exist, providing backwards capability # for those people who defined $stylesheet in a config file if (defined $stylesheet) { - print ''."\n"; + print ''."\n"; } else { foreach my $stylesheet (@stylesheets) { next unless $stylesheet; - print ''."\n"; + print ''."\n"; } } print_feed_meta() if ($status eq '200 OK'); if (defined $favicon) { - print qq(\n); + print qq(\n); } } @@ -4212,11 +4225,6 @@ sub git_header_html { $title EOF - # the stylesheet, favicon etc urls won't work correctly with path_info - # unless we set the appropriate base URL - if ($ENV{'PATH_INFO'}) { - print "\n"; - } print_header_links($status); if (defined $site_html_head_string) { @@ -4234,7 +4242,7 @@ sub git_header_html { if (defined $logo) { print $cgi->a({-href => esc_url($logo_url), -title => $logo_label}, - $cgi->img({-src => esc_url($logo), + $cgi->img({-src => esc_url_base($logo), -width => 72, -height => 27, -alt => "git", -class => "logo"})); @@ -4299,7 +4307,7 @@ sub git_footer_html { insert_file($site_footer); } - print qq!\n!; + print qq!\n!; if (defined $action && $action eq 'blame_incremental') { print qq!