base href's tag added by Zope
Hi, Here is my first lines of the standard_html_header : <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <HTML><HEAD><META HTTP-EQUIV="Content-Type" CONTENT="text/html;"> Here is the first lines received from the server by my browser : <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <HTML><HEAD> <base href="http://www.frenchradiology.net/cerf/" /> <META HTTP-EQUIV="Content-Type" CONTENT="text/html;"> As you can see my Zope's server added the base href ? How can I do to not have this href, or modify if necessary ? Sincerily PS -------------------------------------------------- Oreka ! Nous sommes l'internet moins cher ! Surfez 25% moins cher avec http://www.oreka.com
Funnily enough I posted a message asking what goes on here to zope@zope yesterday, but have since worked out what's going on. The problem is only for index_html files. If you point your browser at www.foo.com/aFolder, it is actually fed www.foo.com/aFolder/index_html; in the lingo, index_html is the default method of the object aFolder. However Web browsers don't grok Zope object orientation, so your browser thinks it is reading a _file_ called myFolder in the root directory of www.foo.com. So if you have a relative link <a href="bar">, the browser thinks this is to www.foo.com/bar, not www.foo.com/aFolder/bar, because it doesn't know aFolder is a folder (if you see what I mean). The way Zope gets around this is to include a handler which checks if index_html is being returned in this way, and puts in the tag <base href="www.foo.com/aFolder/" /> and the browser resolves all relative URLs using this base, so <a href="bar"> is now interpreted as www.foo.com/aFolder/bar, as it should be. If you want finer control over what happens here, you can adjust the base returned in two ways: 1. Put in a base tag yourself (manually) - it will then not attempt to add a new one 2. use the setBase() method on REQUEST.RESPONSE to control what base it will put in (which has much the same effect!) And the third way is to fiddle the source code. The setBase routine is automatically called if the default method is being used by the Traverse method of the BaseRequest class, defined in /lib/python/ZPublisher/BaseRequest.py (line 264 in my release, 2.5.1 source). If you really don't like this behaviour you could get rid of it by removing the lines if request._hacked_path: i=URL.rfind('/') if i > 0: response.setBase(URL[:i]) from this file, but then all your indexes_html will start behaving very, very oddly! I strongly advise you not to do this. On the other hand, if you just want to get rid of it for one file, try writing something like <html><head> <!-- <base href=""> --> </head><body> [...] which will confuse the setBase method - it doesn't realise the base tag is commented out, and refrains from adding one - but this is a totally pointless kludge. Finally: this curious behaviour seems to be set to vanish once and for all in Zope 3. There was an extended discussion on the Zope3-dev list, which you can read at http://lists.zope.org/pipermail/zope3-dev/2002-March/001164.html should you wish to, after which it was concluded that Zope 3 should probably use an HTTP redirect, redirecting requests to www.foo.com/aFolder to www.foo.com/aFolder/. This is the current behaviour of Apache, and it is preferable for a whole host of reasons (chiefly that having <base> tags screws up certain versions of wget, and that JavaScript doesn't recognise <base> tags in most browsers anyway). Sorry if I have bored you; as I said, this is a problem I have recently met myself, so all this was fresh in my mind anyway. David On Wed, 7 Aug 2002, Pascal Samuzeau wrote:
Hi,
Here is my first lines of the standard_html_header :
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <HTML><HEAD><META HTTP-EQUIV="Content-Type" CONTENT="text/html;">
Here is the first lines received from the server by my browser :
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <HTML><HEAD> <base href="http://www.frenchradiology.net/cerf/" /> <META HTTP-EQUIV="Content-Type" CONTENT="text/html;">
As you can see my Zope's server added the base href ?
How can I do to not have this href, or modify if necessary ?
Sincerily PS -------------------------------------------------- Oreka ! Nous sommes l'internet moins cher ! Surfez 25% moins cher avec http://www.oreka.com
_______________________________________________ Zope maillist - Zope@zope.org http://lists.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce http://lists.zope.org/mailman/listinfo/zope-dev )
participants (2)
-
DA Loeffler -
Pascal Samuzeau