How to inject HTML code into every delivered HTML page?
Solution 1:
I am not sure why this hasn't been mentioned in the list of answer. Sorry if it took me 2 years to see this question...
The easiest, most powerful way to do what you want to do what you want is using an Apache filter.
Just have:
ExtFilterDefine css_changer mode=output intype=text/html cmd="/some/php/script.php"
SetOutputFilter css_changer
A possible script:
#!/usr/bin/php
<?
#phpinfo(); // Uncomment to see ALL env variables
$host = $_ENV["HTTP_HOST"]; // www.site.com
$script_name = $_ENV["SCRIPT_NAME"]; // /theme/green/style.css
$pi = pathinfo($script_name);
$type = $pi['extension'];
#print "$host $script $type";
$stdin = STDIN;
while($line = fgets($stdin)){
$line = preg_replace('/a/', 'A', $line);
fwrite(STDOUT, $line);
}
fclose(STDOUT);
?>
This will change all "a"s into "A"s .
Be sure to enable filter in your httpd.conf, like this:
LoadModule ext_filter_module libexec/apache2/mod_ext_filter.so
This question ranks really up in Google and there isn't much out there in terms of forums
Solution 2:
You could do this: Work with mod_rewrite to change requests from
/some/static/page.html
to
/htmlinjector.php?url=/some/static/page.html
then use PHP (or whatever you find appropriate) to do the file-manipulation. Add an output cache to improve performance.
As an alternative, Apache Handlers sound helpful:
Modifying static content using a CGI script
The following directives will cause requests for files with the
html
extension to trigger the launch of thefooter.pl
CGI script.Action add-footer /cgi-bin/footer.pl AddHandler add-footer .html
Then the CGI script is responsible for sending the originally requested document (pointed to by the
PATH_TRANSLATED
environment variable) and making whatever modifications or additions are desired.
This is more or less what the mod_rewrite approach would do, only with less hackery.
Solution 3:
Here is a tutorial on how to use mod_proxy_html to edit the links on a webpage ( the content). You might be able to apply this modify the html you want.
UPDATE: Are you sure you want to go this route? I think Apache is meant to serve content, not create it. This would probably go in the view part of a MVC framework. The reason I wouldn't recommend this is you are breaking the rule of modularity. Your web application will be intertwined with the application that server it, complicating future upgrades, moves, etc.
Solution 4:
I would prefer to do this with mod_rewrite and SSI.
First put the path into an environment variable
RewriteCond %{IS_SUBREQ} false RewriteRule ^(/.*\.html) /page.shtml [E:filename:$1]
then process that in the shtml file
<!--#include virtual="$filename"-->
(parts of this solution are based on a stackoverflow question https://stackoverflow.com/questions/40133/getting-apache-to-modify-static-webpages-on-the-fly/1196832 )
Solution 5:
mod_sed is a good fit here. You can create an output filter that matches the closing head or body tag, for example, and insert your html before it.