FREE THOUGHT · FREE SOFTWARE · FREE WORLD

.htaccess mod_rewrite rewrite examples

Here are some useful mod_rewrite rewrite examples that you can use in your .htaccess file. Some of my favorites.

Begin mod_rewrite in .htaccess

RewriteEngine On
RewriteBase /

Loop Stopping Code

Sometimes your rewrites cause infinite loops, stop it with one of these rewrite code snippets.

RewriteCond %{REQUEST_URI} ^/(stats/|missing.html|failed_auth.html|error/).* [NC]
RewriteRule .* - [L]
RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule .* - [L]

Cache-Friendly File Names

This is probably my favorite, and I use it on every site I work on. It allows me to update my javascript and css files in my visitors cache's simply by naming them differently in the html, on the server they stay the same name. This rewrites all files for /zap/j/anything-anynumber.js to /zap/j/anything.js and /zap/c/anything-anynumber.css to /zap/c/anything.css

RewriteRule ^zap/(j|c)/([a-z]+)-([0-9]+).(js|css)$ /zap/$1/$2.$4 [L]

When you use flash on your site and you properly supply a link to download flash that shows up for non-flash aware browsers, it is nice to use a shortcut to keep your code clean and your external links to a minimum. This code allows me to link to site.com/getflash/ for non-flash aware browsers.

RewriteRule ^getflash/?$ http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash [NC,L,R=307]

Removing the Query_String

On many sites, the page will be displayed for both page.html and page.html?anything=anything, which hurts your SEO with duplicate content. An easy way to fix this issue is to redirect external requests containing a query string to the same uri without the query_string.

RewriteCond %{THE_REQUEST} ^[A-Z]+ /.*\ HTTP/
RewriteCond %{QUERY_STRING} !^$
RewriteRule .* https://www.askapache.com%{REQUEST_URI}? [R=301,L]

Requiring a subdomain like www

This mod_rewrite code for your .htaccess will 301 redirect and request for askapache.com/anything to www.askapache.com/anything

RewriteCond %{HTTP_HOST} !^www.askapache.com$ [NC]
RewriteRule ^(.*)$ https://www.askapache.com/$1 [R=301,L]

Sending requests to a php script

This .htaccess rewrite example invisibly rewrites requests for all Adobe pdf files to be handled by /cgi-bin/pdf-viewer.php

RewriteRule ^(.+).pdf$  /cgi-bin/pdf-viewer.php?file=$1.pdf [L,NC,QSA]

Setting the language variable based on Client

For sites using multiviews or with multiple language capabilities, it is nice to be able to send the correct language automatically based on the clients preferred language.

RewriteCond %{HTTP:Accept-Language} ^.*(de|es|fr|it|ja|ru|en).*$ [NC]
RewriteRule ^(.*)$ - [env=prefer-language:%1]

Only allowing certain request_methods

This rewrite example denies any request with a request_method other than the specified request_methods with a 403 Forbidden HTTP status code.

RewriteCond %{REQUEST_METHOD} !^(POST|GET|OPTIONS|PUT)$
RewriteRule .* - [F,L]

Htaccess

Comments