On Tue, 27 Jan 2009, Giuseppe Bilotta wrote: > When PATH_INFO is defined, static files such as the defalt CSS or the default > shortcut icon are not accessible beyond the summary page (e.g. in > shortlog or commit view). > > Fix this by adding a <base> tag pointing to the script base URL. By the way, I have thought that it would conflict with use path_info for 'blob_plain' action to have links work in document... but I forgot that then we do not use gitweb HTML header... > > Signed-off-by: Giuseppe Bilotta <giuseppe.bilotta@xxxxxxxxx> > --- > Of course, last time I forgot that the BASE href is supposed to be > absolute. While Opera apparently has no problem with it being relative, > other browsers such as Firefox are stricter about it. Errrr... I think you are talking about _full_ vs. _absolute_, not _absolute_ vs. _relative_, see below. > > gitweb/gitweb.perl | 8 ++++++++ > 1 files changed, 8 insertions(+), 0 deletions(-) > > diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl > index 931db4f..411b1f6 100755 > --- a/gitweb/gitweb.perl > +++ b/gitweb/gitweb.perl > @@ -2901,6 +2901,14 @@ sub git_header_html { > <meta name="robots" content="index, nofollow"/> > <title>$title</title> > EOF > +# the stylesheet, favicon etc urls won't work correctly with path_info unless we set the appropriate base URL Errr... could you please break this line to not have it overly long? > + if ($ENV{'PATH_INFO'}) { > + my $base = $my_url; Hmmm... our $my_url = $cgi->url(); # = $cgi->url(-full); our $my_uri = $cgi->url(-absolute => 1); > + my $sname = $ENV{'SCRIPT_NAME'}; > + $base =~ s,\Q$sname\E$,,; > + $base .= "/"; I don't think that is required; neither of $my_url and $my_uri ends with '/' after stripping path info: our $path_info = $ENV{"PATH_INFO"}; if ($path_info) { $my_url =~ s,\Q$path_info\E$,,; $my_uri =~ s,\Q$path_info\E$,,; } and if BASE is a document, then relative URLs are resolved using dirname of BASE, I guess, as http://www.w3.org/TR/html401/struct/links.html#edef-BASE contains in example: <BASE href="http://www.aviary.com/products/intro.html"> See also RFC1808 (Relative Uniform Resource Locators), section 4. Resolving Relative URLs: Step 6: The last segment of the base URL's path (anything following the rightmost slash "/", or the entire path if no slash is present) is removed and the embedded URL's path is appended in its place.[...] Besides, if you strip SCRIPT_NAME, then you are left with document root; this means that if git-logo.png etc. are in the same directory as gitweb.cgi, they won't be found. For example for me it doesn't work correctly (I have git-logo.png along gitweb.cgi, which is in /cgi-bin/gitweb/... and thanks to symlinks also in /gitweb/). By the way, according to documentation $cgi->url() should *not* contain path_info; you have to use $cgi->url(-path_info=>1) for that... strange. > + print "<base href=\"$base\"/>\n"; Just in case, to be compatible with both XHML and HTML, we should use + print "<base href=\"$base\" />\n"; ...if not for the fact that surrounding code doesn't use this way... > + } > # print out each stylesheet that exist > if (defined $stylesheet) { > #provides backwards capability for those people who define style sheet in a config file > -- > 1.5.6.5 > > -- Jakub Narebski Poland -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html