Apache Traffic Server Rewrite Header Plugin
This is a plugin for ATS (Apache Traffic Server), that allows you to
perform various header "rewrite" rules (operations) on a request or
response. It is loosely modeled after Apache HTTPD's mod_rewrite.


Using the plugin
----------------

This plugin can be used as both a global plugin, enabled in plugin.config:

  header_rewrite.so config_file_1.conf config_file_2.conf ...

These are global rules, which would apply to all requests. Another option is
to use per remap rules in remap.config

  map http://a http://b @plugin=header_rewrite.so @pparam=rules1.conf ...


In the second example, hooks which are not to be executed during the remap
phase (the default) causes a transaction hook to be instantiated and used
at a later time. This allows you to setup e.g. a rule that gets executed
during the origin response header parsing, using READ_RESPONSE_HDR_HOOK.

For more information on how to use this plugin, please see

  https://docs.trafficserver.apache.org/en/latest/admin-guide/plugins/header_rewrite.en.html
