HTACCESS is a remarkable tool you can use for password protection, error handling (like custom 404 pages), or HTTP redirects. It can also be used to transform whole folders in seconds: adding headers to all your HTML documents, watermarking all your images, and more.
A wrapper is like a middleman. Using htaccess you can tell your web server to "forward" certain files to PHP scripts of yours. When a visitor tries to load an image in their browser, you could activate a script that adds a watermark to image. When an HTML page is loaded you could query an IP-to-country database and have your HTML pages translated into native language of your visitor's country-of-origin.
Every file in a folder, or all files of a certain type in a folder, can be instructed to go through a PHP script.
Pretend you host several affiliate sites, or a full-blown hosting service like Geocities. Most sites running on free hosting services have some kind of advertisement owners use to generate revenue. These aren't applied voluntarily by users of these services. The ads don't even show up on their source files, just when displayed on web.
It's possible to replicate this feature using less than 10 lines of PHP and htaccess code. To start off, make a folder on your web host called "header". Create a new text file and enter following:
AddHandler headered .htm AddHandler headered .html
Action headered /header/header.php
This designates files with extension ".htm" and ".html" to a type called "headered". The name "headered" can really be anything, it's just a way of labeling a group of files. The last line there tells web server that if any of file types in group called "headered" are called, we should instead execute script "/header/header.php". This is relative path, so if your URL is http://your.host, this will run http://your.host/header/header.php.
That's all you've got to do for htaccess file. Save that as "htaccess.txt" -- we'll get back to it later.
For actual wrapper, create a new text file with standard tags, then assign your header and footer file names to variables called $header and $footer.
$header = "header.html"; $footer = "footer.html";
Redirecting a user to our script doesn't pass its contents to it, just filename. If you call phpinfo() in your script and scroll to bottom you can see all server variables which give us name. The element "REQUEST_URI" in $_SERVER gives us relative path (/header/sample.html), but we want full system path since we're going to be reading actual file (/home/username/wwwroot/your.host/header/sample.html), which is "PATH_TRANSLATED".
$file = $_SERVER["PATH_TRANSLATED"];
The name of file that just tried to be shown is now stored in variable $file. Three simple things are left: output header, output actual file, then output footer.
readfile($header); readfile($file); readfile($footer);
That's it. Here's entire header.php file:
$header = "header.html"; $footer = "footer.html";
$file = $_SERVER["PATH_TRANSLATED"]; readfile($header); readfile($file); readfile($footer);
All that, in just nine lines of code. Download it here: http://www.jumpx.com utorials/wrapper/header.zip
That contains htaccess file and PHP wrapper script, along with a sample header, footer, and a test page. Upload all five files to your web host, chmod htaccess.txt to 0755 then rename it to ".htaccess". It might disappear from your directory listing which is okay, it should still be there.
Load, in your browser, copy of sample.html residing on your web server. The text "This is my header" should appear at top while "This is my footer" should show on bottom. If you open up actual file called sample.html, you'll see that these actually aren't there. They've been added in by script all HTML files in folder "header" must now pass through.
This is how wrappers work. Certain things, like adding custom headers and footers are done "on fly" without modifying your original file. You'll get same effect if you create other HTML files and upload them to this folder.
Files without ".html" or ".htm" extensions, such as text files or images, won't show these headers or footers. This is a good thing because text files aren't part of presentation on a web site and adding extra text to images will corrupt them. It affects all HTML files within your /headers folder, and none of files outside of it.
If you wanted, you could add or remove any file extensions you want, just by adding or taking away those "AddHandler" lines.
To get everything back to normal, either delete your .htaccess file or upload a blank .htaccess file in that folder, and all will be well again.
The same basic formula can be applied again for other uses -- HTTP compression, for example. This was an idea that used to be impractical because computers ran at slower speeds, and is now obsolete because of broadband technologies (DSL and cable).
It works like this: when an HTML page is loaded, web server instead gives visitor a zipped or compressed version of that page. The visitor downloads that file, which of course takes up less space than real thing and downloads in less time, then unzips it and displays original page.
In this age of lighting fast DSL lines, there's almost no noticeable difference. However, if you have a site that hosts large files whose audience is mostly dialup users, it might be something to look into.
Make a new folder called "compress". Create your htaccess file again, just as before, but set extensions to include .htm, .html, and .txt. (The group name, folder name, and script name have nothing to do with one another, you can name any of these whatever you like -- I just like things to match.)
Our wrapper script for this should be called "compress.php". That's what I'm naming mine. This means htaccess file you have should look as follows:
AddHandler compress .html AddHandler compress .htm AddHandler compress .txt
Action compress /compress/compress.php
If our wrapper were simply going to pass through file (in other words, just read its contents into a variable and display it), our handler script would look like this: