You are viewing a plain text version of this content. The canonical link for it is here.
Posted to docs@httpd.apache.org by Apache Wiki <wi...@apache.org> on 2011/07/18 18:10:53 UTC

[Httpd Wiki] Update of "RewriteMisc" by SeanGaragan

Dear Wiki user,

You have subscribed to a wiki page or wiki category on "Httpd Wiki" for change notification.

The "RewriteMisc" page has been changed by SeanGaragan:
http://wiki.apache.org/httpd/RewriteMisc?action=diff&rev1=4&rev2=5

Comment:
Updating with header routing as I could not find this anywhere else

  == Look somewhere else for that image ==
- 
  If the image isn't in the /images/ directory, look in /images1/, /images2/, and /images3/ for it as well.
  
  {{{
@@ -23, +22 @@

  RewriteCond /usr/local/apache/htdocs/images3/%{REQUEST_FILENAME} -f
  RewriteRule ^ /usr/local/apache/htdocs/images3/%{REQUEST_FILENAME} [L]
  }}}
- 
  == Redirect Everything ==
- 
  I want all requests to my site to get sent to a certain page. Perhaps for a "system is down for maintenance" condition, or perhaps there's really only one page here. So, for example, let's send everything to '''page.html'''
  
  {{{
  RewriteEngine On
  RewriteRule !^/page\.html$ /page.html [PT]
  }}}
- 
  Or, if you want all pages mapped to a handler that knows what to do with that page:
  
  {{{
@@ -40, +36 @@

  RewriteCond $1 !=/handler.php
  RewriteRule ^(.*) /handler.php?uri=$1 [PT]
  }}}
- 
- 
  = Connecting to Tomcat =
  == Problem: ==
  We are using the 2.2 branch of Apache HTTP Server as frontend while all requests with a jsp extension should be served by our tomcat backend server on Port 8009.
@@ -53, +47 @@

  
  ProxyPassReverse / ajp://localhost:8009/
  }}}
- 
  == Discussion: ==
  Mod_rewrite passes all requests which are ending with .jsp to mod_proxy ([[Flags/P]]). We use the Apache JServ Protocol (ajp), this means the modules [[http://httpd.apache.org/docs/trunk/mod/mod_proxy_ajp.html|mod_proxy_ajp]] and mod_proxy must be loaded into the server configuration.
  
@@ -63, +56 @@

  
  == Recipe: ==
  Using mod_rewrite, mod_proxy and mod_proxy_balancer.
+ 
  {{{
  RewriteEngine On
  RewriteRule ^/(.+\.php)$ balancer://myphpcluster/$1 [P]
  
  <Proxy balancer://myphpcluster>
      BalancerMember http://10.0.0.1 smax=10 loadfactor=20
-     BalancerMember http://10.0.0.2 
+     BalancerMember http://10.0.0.2
      ProxySet maxattempts=2
  </Proxy>
  
  ProxyPassReverse / http://10.0.0.1/
  ProxyPassReverse / http://10.0.0.2/
  }}}
- 
  == Discussion: ==
  ''A brief description may be provided in the future.''
  
  For a list of available ProxyPass parameters see the [[http://httpd.apache.org/docs/trunk/mod/mod_proxy.html#proxypass|mod_proxy documentation]].
  
  '''Note:''' The directive ProxySet is undocumented. You can use this directive in order to set additional parameters for a balancer or a worker, because the following does not work as expected:
+ 
  {{{
  # maxattempts=2 and other paramters are not recognized this way
  RewriteRule ^/(.+\.php)$ balancer://myphpcluster/$1 [P] maxattempts=2
  }}}
- 
  = Log executable file access =
- 
  We wish to create a log file that logs accesses to executable files, wherever they are in the filesystem, and whatever file extension they have.
  
  {{{
@@ -97, +89 @@

  RewriteRule ^ - [E=exec:1]
  CustomLog /var/logs/exec-cgi.log combined env=exec
  }}}
- 
  == Discussion ==
- 
  The LA-U syntax does a look-ahead to find out what the value of a particular variable will be later on. This requires a sub-request, and that results in something of a performance hit. Consider using the ScriptLog directive instead. However, the technique used here can be used for a larger class of problems, when a variable isn't available at request time, but will be later on.
  
+ = Using HTTP Headers for routing =
+ == Problem: ==
+ Using a custom HTTP header for rewrite rules to allow calls to be dynamically routed
+ 
+ == Recipe: ==
+ Using mod_rewrite, mod_proxy and custom headers sent from a client, we have been able to rewrite end points for web service calls routed through a proxy to multiple backends.
+ 
+ {{{
+ RewriteEngine on
+ RewriteLog "logs/rewrite.log"
+ #RewriteLogLevel 5
+ 
+ # The following rule routes to the first server
+ RewriteCond %{HTTP:X-WS-Version} Version1
+ RewriteRule (.*) http://myserver1.com:7001$1 [P,L]
+ 
+ # The following rule routes to the second server
+ RewriteCond %{HTTP:X-WS-Version} Version2
+ RewriteRule (.*) http://myserver2.com:7001$1 [P,L]
+ }}}
+ == Discussion: ==
+ We needed this for internal routing of web service calls proxied from a web app server to our backend servers.  We wanted a way to have multiple web service engines in behind with the client not knowing anything about where the call was routed to.  The service bus could not always handle dynamic routing but the client could set a header value with routable data.  As well, this type of routing is far more efficient than having a service bus pull the message apart and route based on that, even on SOAP headers.
+ 

---------------------------------------------------------------------
To unsubscribe, e-mail: docs-unsubscribe@httpd.apache.org
For additional commands, e-mail: docs-help@httpd.apache.org