Re: need to write a fitler based on request header
On Thu 28 Feb 2008, J. Peng wrote: > I need to write an input filter based on the request headers. > If request includes a "Accept-Encoding: gzip, deflate" header, I > should redirect the request to /pathA. > If request doesn't include that header, I should redirect the request to > /pathB. (pathA and pathB are web document dirs on web server.) I think you don't need an input filter. What you need is a PerlTransHandler or a PerlMapToStorageHandler that checks $r->headers_in->{'Accept-Encoding'} and sets $r->filename and/or $r->uri accordingly. This can even be done with mod_rewrite. Torsten
Re: need to write a fitler based on request header
thanks torsten. currently I write it with PerlAccessHandler, it also works. is it right with this handler? no, mod_rewrite can't rewrite requests based on Accept-Encoding header. On Thu, Feb 28, 2008 at 7:26 PM, Torsten Foertsch <[EMAIL PROTECTED]> wrote: > On Thu 28 Feb 2008, J. Peng wrote: > > I need to write an input filter based on the request headers. > > If request includes a "Accept-Encoding: gzip, deflate" header, I > > should redirect the request to /pathA. > > If request doesn't include that header, I should redirect the request to > > /pathB. (pathA and pathB are web document dirs on web server.) > > I think you don't need an input filter. What you need is a PerlTransHandler > or > a PerlMapToStorageHandler that checks $r->headers_in->{'Accept-Encoding'} and > sets $r->filename and/or $r->uri accordingly. > > This can even be done with mod_rewrite. > > Torsten >
Re: need to write a fitler based on request header
On Thu 28 Feb 2008, J. Peng wrote: > currently I write it with PerlAccessHandler, it also works. is it > right with this handler? Do you want to send a redirect to the browser (HTTP code 3xx)? If yes then it can be done in an access handler as well. If you simply want to send the document in /pathA or /pathB then I think you'd prefer something *before* the core map_to_storage handler, that means a PerlTransHandler or a PerlMapToStorageHandler since otherwise you'd need to fill out the finfo field by yourself, see http://perl.apache.org/docs/2.0/api/Apache2/RequestRec.html#C_finfo_ > no, mod_rewrite can't rewrite requests based on Accept-Encoding header. yes, something like this: RewriteCond %{HTTP:Accept-Encoding} gzip [OR] RewriteCond %{HTTP:Accept-Encoding} deflate RewriteRule ^(.*) /pathA/$1 [PT,L] RewriteRule ^(.*) /pathB/$1 [PT,L] or as an external redirect: RewriteCond %{HTTP:Accept-Encoding} gzip [OR] RewriteCond %{HTTP:Accept-Encoding} deflate RewriteRule ^(.*) /pathA/$1 [R,L] RewriteRule ^(.*) /pathB/$1 [R,L] Why do you think this wouldn't work? > On Thu, Feb 28, 2008 at 7:26 PM, Torsten Foertsch > > <[EMAIL PROTECTED]> wrote: > > On Thu 28 Feb 2008, J. Peng wrote: > > > I need to write an input filter based on the request headers. > > > If request includes a "Accept-Encoding: gzip, deflate" header, I > > > should redirect the request to /pathA. > > > If request doesn't include that header, I should redirect the request > > to > /pathB. (pathA and pathB are web document dirs on web server.) > > > > I think you don't need an input filter. What you need is a > > PerlTransHandler or a PerlMapToStorageHandler that checks > > $r->headers_in->{'Accept-Encoding'} and sets $r->filename and/or $r->uri > > accordingly. > > > > This can even be done with mod_rewrite. Torsten -- A: It reverses the normal flow of conversation. Q: What's wrong with top-posting? A: Top-posting. Q: What's the biggest scourge on plain text email discussions?
Re: need to write a fitler based on request header
On Thu, Feb 28, 2008 at 8:30 PM, Torsten Foertsch <[EMAIL PROTECTED]> wrote: > On Thu 28 Feb 2008, J. Peng wrote: > > > currently I write it with PerlAccessHandler, it also works. is it > > right with this handler? > > Do you want to send a redirect to the browser (HTTP code 3xx)? I use apache's inner redirect rather than the 3xx external redirection. > If yes then it > can be done in an access handler as well. If you simply want to send the > document in /pathA or /pathB then I think you'd prefer something *before* the > core map_to_storage handler, that means a PerlTransHandler or a > PerlMapToStorageHandler since otherwise you'd need to fill out the finfo > field by yourself, see > > http://perl.apache.org/docs/2.0/api/Apache2/RequestRec.html#C_finfo_ > > thanks for the info. > > no, mod_rewrite can't rewrite requests based on Accept-Encoding header. > > yes, something like this: > > RewriteCond %{HTTP:Accept-Encoding} gzip [OR] > RewriteCond %{HTTP:Accept-Encoding} deflate > RewriteRule ^(.*) /pathA/$1 [PT,L] > > RewriteRule ^(.*) /pathB/$1 [PT,L] > > or as an external redirect: > > RewriteCond %{HTTP:Accept-Encoding} gzip [OR] > RewriteCond %{HTTP:Accept-Encoding} deflate > RewriteRule ^(.*) /pathA/$1 [R,L] > > RewriteRule ^(.*) /pathB/$1 [R,L] > > Why do you think this wouldn't work? > I'll try it. thanks so much torsten.
Re: need to write a fitler based on request header
Hello Torsten, I have tested your rewrite syntax like below: RewriteEngine On RewriteCond %{HTTP:Accept-Encoding} gzip [OR] RewriteCond %{HTTP:Accept-Encoding} deflate RewriteRule ^/unzip/(.*) /gziped/$1 [PT,L] Sorry it can't work. Also I checked apache's official document for mod_rewrite: http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html It says the rewriting conditions on http headers include only: HTTP headers: -- HTTP_USER_AGENT HTTP_REFERER HTTP_COOKIE HTTP_FORWARDED HTTP_HOST HTTP_PROXY_CONNECTION HTTP_ACCEPT So as I've said, you can't rewrite the request based on Accept-Encoding header.Is it? Thanks. On Thu, Feb 28, 2008 at 8:30 PM, Torsten Foertsch <[EMAIL PROTECTED]> wrote: > On Thu 28 Feb 2008, J. Peng wrote: > > > no, mod_rewrite can't rewrite requests based on Accept-Encoding header. > > yes, something like this: > > RewriteCond %{HTTP:Accept-Encoding} gzip [OR] > RewriteCond %{HTTP:Accept-Encoding} deflate > RewriteRule ^(.*) /pathA/$1 [PT,L] > > RewriteRule ^(.*) /pathB/$1 [PT,L] > > or as an external redirect: > > RewriteCond %{HTTP:Accept-Encoding} gzip [OR] > RewriteCond %{HTTP:Accept-Encoding} deflate > RewriteRule ^(.*) /pathA/$1 [R,L] > > RewriteRule ^(.*) /pathB/$1 [R,L] > > Why do you think this wouldn't work? >
Re: need to write a fitler based on request header
On Thu 28 Feb 2008, J. Peng wrote: > Also I checked apache's official document for mod_rewrite: > http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html Well, Apache 2.2 can, see http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritecond Other things you should be aware of: ... 4. %{HTTP:header}, where header can be any HTTP MIME-header name, can always be used to obtain the value of a header sent in the HTTP request. Example: %{HTTP:Proxy-Connection} is the value of the HTTP header ``Proxy-Connection:''. ... I wasn't aware that this is a feature only of 2.2+. Torsten