Hello everyone,Recently I begin learn capabilities of mod_rewrite, and found that task, which I want to resolv, did not resolvs with help of mod_rewrite (or I wrongly thinking, and I want to consult).
So, I have Router host, which stand on border between my local network an Internet. Also, at my local network where are two resources by the point of view of Router host:
http://internal_network_host/first.html http://internal_network_host/third.html Well, I want to reproduce next two scripts: 1) If Router gets request from Internet like http://router.com/firsthe should proxy that request to access http://internal_network_host/first.html resource. So, it's look like the user from Internet accessed http://internal_network_host/first.html directly.
2) If Router gets request from Internet like, http://router.com/secondhe sould redirect client (responce 302) to http://router.com/third, where client could access via proxy mechanism (like first case) resource http://internal_network_host/third.html. So:
client: http://router.com/second router: 302 http://router.com/third client: http://router.com/thirdand router return content of http://internal_network_host/third.html resource.
To reproduce such schema via standart RewriteRule sets - it's, I think, easy.
But I want do it using external program, like this:
RewriteEngine on
RewriteLog "/var/www/html/rewrite.log"
RewriteLogLevel 255
RewriteLock /var/www/html/redir.lock
RewriteMap rd prg:/var/www/html/redirect.pl
RewriteRule ^(.+)$ ${rd:%{THE_REQUEST}}
and source code of external program, like this:
-----------------------8<---------------------------------------------
#!/usr/bin/perl
$| = 1;
while (<STDIN>) {
$request = $_;
if ($request eq "GET http://router.com/first HTTP/1.1" ) {
proxy to access to resource
http://internal_network_host/first.html
} elsif ($request eq "GET http://router.com/second HTTP/1.1" ) {
redirecting to http://router.com/third
} else {
do something else....
}
}
-----------------------8<---------------------------------------------
And now, I did not understand how, by using only one
RewriteRule ^(.+)$ ${rd:%{THE_REQUEST}}
rule and one programs, I can achieve such goal.
I tell, why I need only this one rule, which grabs all requests and
calls one external program for every request: because I will apply such
scheme to virtual domains like:
[0-9a-z]*.router.comand I some domains I will just proxing, and another domains I will redirect to another resource. All this should be done by external program, and that why I want to aks a help.
Thanks for helping me. Dmitriy.
smime.p7s
Description: S/MIME Cryptographic Signature
