karim Bendadda wrote:
Hi All;

I tried this

*request_rec *subr = ap_sub_req_lookup_uri(url, r, NULL);
apr_table_set( subr->headers_out, "Location", url );
ap_log_rerror( APLOG_MARK, APLOG_ERR, 0,r, "sub request status:
%i",subr->status );
ap_run_sub_req(subr);*

I have the following error:

*[Thu Jan 17 07:11:25 2008] [error] [client 10.75.197.168] File does not
exist: /usr/local/apache2/htdocs/my_module*

I think because the external server is not on the same site..I read the
paragraph 6.3 Diverting a Request: The internal redirect ...I think there is
no external redirect for http requests...
Any suggestion please??

That error and assumption are correct. As Ray stated, the ap_sub_req_lookup_uri only works if the URI is on the local server's apache. (It is a URI vs. URL concept - the URI does not include the http://servername piece of the URL.)

Instead, try a simple :

r->filename = apr_pstrcat(r->pool, "proxy:", url, NULL);
return 1;

(this example was stolen from mod_rewrite, which was the only core module that I was aware of that included a "send to proxy" command). Just set the URL to what the client would have been grabbing if it was redirected to the right page. For example, if the client is trying to get the page http://corvette.sharktooth.org/status.html , the resulting line would be :

url = apr_pstrdup(r->pool,"http://corvette.sharktooth.org/status.html";);
r->filename = apr_pstrcat(r->pool, "proxy:", url, NULL);
return 1;

(this could also be shortened - what the three lines do are 1) get/set the URL, which should be set in your case already, 2) preface the URL with "proxy:", which is an indicator to proxy the request elsewhere, and 3) allow apache to handle the rest of the request).

Try it and let us know if that works for you.

Joe
--
Joseph Lewis <http://sharktooth.org/>
"Divide the fire, and you will sooner put it out." - Publius Syrus

Reply via email to