You are viewing a plain text version of this content. The canonical link for it is here.
Posted to mod_python-dev@quetz.apache.org by "Graham Dumpleton (JIRA)" <ji...@apache.org> on 2006/03/01 12:15:41 UTC

[jira] Commented: (MODPYTHON-132) Expose ap_construct_url() in request object.

    [ http://issues.apache.org/jira/browse/MODPYTHON-132?page=comments#action_12368261 ] 

Graham Dumpleton commented on MODPYTHON-132:
--------------------------------------------

This ap_construct_url() method held so much promise as far as solving the redirection issue. Unfortunately, it seems to get it wrong occasionally. :-(

  req.the_request = GET /~grahamd/authenhandler/?invalidate HTTP/1.1

  req.headers_in["host"] = localhost:8080
  req.connection.local_addr =  ('127.0.0.1', 8080)

For whatever reason though in this one case, it spat out:

  http://localhost/~grahamd/authenhandler/login.html

What happened to my port number?

I think it is tied up with fact that request was against a directory and it was doing odd things based on DirectoryIndex value. Ie., Apache was trying multiple alternatives and after first somehow decided to not bother including port properly.

But then, I was trying to use mod_python.util.redirect() in an authenhandler and it looks like the redirect function may actually be buggy. Specifically, mod_python.util.redirect() returns apache.OK when it should actually be returning apache.DONE as it forms a complete response. Because it wasn't returning apache.DONE, Apache kept trying to match files in DirectoryIndex when it should have given up after the first because a redirect response was being returned.

Will have to do some testing and will have to post a distinct issue if it should be changed.

> Expose ap_construct_url() in request object.
> --------------------------------------------
>
>          Key: MODPYTHON-132
>          URL: http://issues.apache.org/jira/browse/MODPYTHON-132
>      Project: mod_python
>         Type: Improvement
>   Components: core
>     Versions: 3.3
>     Reporter: Graham Dumpleton

>
> Apache provides the function ap_construct_url(). Its purpose is:
>   char *ap_construct_url (pool *p, const char *uri, const request_rec *r) 
>     This function builds a fully qualified URI string from the path specified
>     by uri, using the information stored in the request record r to determine
>     the server name and port. The port number is not included in the string
>     if it is the same as the default port 80.
>     For example, imagine that the current request is directed to the virtual
>     server www.modperl.com at port 80. Then the following call will return
>     the string http://www.modperl.com/ index.html:
>         char *url = ap_construct_url(r->pool, "/index.html", r);
> This may be a solution to issue previously discussed about how to create a full URL for purpose of doing a redirect.
> Even if not perfect, should be exposed as req.construct_url(). After all, the Apache folks are more likely to get this correct and maintain it, better than we can do our own version in Python.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira