To 301 or not to 301 ... that is the question. Whether 'tis better to quietly redirect your users to a new page through mod_rewrite, or to instruct them to look elsewhere -
Darren Shakespeare - 2003 ;-)
In all seriousness - what should you do when someone arrives at your web site looking for a URL that doesn't exist? You could simply send back a "not found" message through the HTTP response - type 404 - but there are other alternatives.
• You could use mod_rewrite to silently transfer their request to a different URL that does exist
• You could reply with a status code 302 (or 303 or 307) telling the browser that the resource is temporarily to be found elsewhere
• You could reply with a status code 301 - a permanent move, again telling the browser to re-request from elsewhere.
Which would you use in what circumstances?
* The archive pages of this blog each have their own URL, but in practise there isn't a full directory of files - one for each page - on the server. We use mod_rewrite to silently transfer the requests. And we do it silently because we do not want to change what's in the URL bar, nor to give the user any thought of changing to a different URL.
Example from .htaccess:
RewriteRule ^(.*)\.htm dvrt.php?sharename=$1&%{QUERY_STRING}
* We use a permanent move where people (or automata) used a URL on our wiki which includes extra "/" characters ... you'll find that if you call up http://www.wellho.net/share/the/pizza.html you'll be redirected to
http://www.wellho.net/share/deep.html - and that will change in your browser bar too.
Example from .htaccess:
RewriteRule (.*)/(.*)\.htm /share/deep.html [R=301,L]
The difference between permanent and temporary moves is that the browser remembers a permanent move and should ask for the new location on the following visit; but in the case of a temporary move it will remember the original setting and try that on the following occasion.
See
[here] for status code listing (at wikiPedia).
(written 2010-08-03, updated 2010-10-08)
Associated topics are indexed as below, or enter http://melksh.am/nnnn for individual articles
A607 - Web Application Deployment - Apache httpd mod_rewrite [631] Apache httpd to Tomcat - jk v proxy - (2006-03-03)
[755] Using different URLs to navigate around a single script - (2006-06-11)
[934] Clustering, load balancing, mod_rewrite and mod_proxy - (2006-11-21)
[1006] Apache httpd and Apache Tomcat together tips - (2006-12-24)
[1009] Passing GET parameters through Apache mod_rewrite - (2006-12-27)
[1207] Simple but effective use of mod_rewrite (Apache httpd) - (2007-05-27)
[1376] Choosing between mod_proxy and mod_rewrite - (2007-10-02)
[1381] Using a MySQL database to control mod_rewrite via PHP - (2007-10-06)
[1636] What to do if the Home Page is missing - (2008-05-08)
[1731] Apache httpd, MySQL, PHP - installation procedure - (2008-08-01)
[1771] More HowTo diagrams - MySQL, Tomcat and Java - (2008-08-24)
[1778] Pointing all the web pages in a directory at a database - (2008-08-30)
[1954] mod_rewrite for newcomers - (2008-12-20)
[2094] If you have a spelling mistake in your URL / page name - (2009-03-21)
[2555] Bookkeeping - (2009-12-29)
[2728] Redirecting a home page using mod_rewrite - (2010-04-17)
[2768] Carrying a long URL around - looking for memorable shorts - (2010-05-17)
[2773] Dynamically watching your web site via a PHP wrapper - (2010-05-21)
[2981] How to set up short and meaningfull alternative URLs - (2010-10-02)
[3197] Finding and diverting image requests from rogue domains - (2011-03-08)
[3339] Simplest ever proxy configuration? - (2011-06-28)
[3568] Telling which ServerAlias your visitor used - useful during merging domains - (2012-01-04)
[3753] Adding a passcode to a directory - (2012-06-05)
[3862] Forwarding a whole domain, except for a few directories - Apache http server - (2012-09-17)
A603 - Web Application Deployment - Further httpd Configuration [345] Spotting a denial of service attack - (2005-06-12)
[466] Separating 'per instance' data from binaries and web sites - (2005-10-16)
[526] Apache httpd - serving web documents from different directories - (2005-12-12)
[550] 2006 - Making business a pleasure - (2006-01-01)
[649] Denial of Service ''attack'' - (2006-03-17)
[662] An unhelpful error message from Apache httpd - (2006-03-30)
[853] To list a directory under httpd on a web server, or not? - (2006-09-02)
[1080] httpd.conf or .htaccess? - (2007-02-14)
[1121] Sharing the load with Apache httpd and perhaps Tomcat - (2007-03-29)
[1351] Compressing web pages sent out from server. Is it worth it? - (2007-09-14)
[1355] .php or .html extension? Morally Static Pages - (2007-09-17)
[1377] Load Balancing with Apache mod_jk (httpd/Tomcat) - (2007-10-02)
[1551] Which modules are loaded in my Apache httpd - (2008-02-23)
[1554] Online hotel reservations - Melksham, Wiltshire (near Bath) - (2008-02-24)
[1564] Default file (MiMe types) for Apache httpd and Apache Tomcat - (2008-03-04)
[1566] Strange behaviour of web directory requests without a trailing slash - (2008-03-06)
[1619] User and Group settings for Apache httpd web server - (2008-04-22)
[1707] Configuring Apache httpd - (2008-07-12)
[1762] WEB-INF (Tomcat) and .htaccess (httpd) - (2008-08-20)
[1767] mod_proxy and mod_proxy_ajp - httpd - (2008-08-22)
[1939] mod_proxy_ajp and mod_proxy_balancer examples - (2008-12-13)
[1955] How to avoid duplicating web page maintainance - (2008-12-20)
[1974] Moving a directory on your web site - (2009-01-03)
[2060] Database connection Pooling, SSL, and command line deployment - httpd and Tomcat - (2009-03-01)
[2272] Monitoring and loading tools for testing Apache Tomcat - (2009-07-07)
[2478] How did I do THAT? - (2009-10-26)
[3133] An image from a website that occasionally comes out as hyroglyphics - (2011-01-14)
[3449] Apache Internal Dummy Connection - what is it and what should I do with it? - (2011-09-19)
[3635] Parse error: parse error, unexpected T_STRING on brand new web site - why? - (2012-03-03)
[3955] Building up from a small PHP setup to an enterprise one - (2012-12-16)
[4001] Helping search engines with appropriate 400 error codes - (2013-02-11)
[4307] Identifying and clearing denial of service attacks on your Apache server - (2014-09-27)
Some other Articles
Melksham Area Board meeting of last weekBath to Devizes bus via Melksham - changing again in SeptemberCommunity consultation - a true open inputAmbassador or Anorak?Redirecting a page - silent, temporary or permanent?Groupsave tickets - 3 or 4 train tickets for the price of 2Programming Standards from the start!The Land of the Black LabradorLAMP - Linux, Apache, MySQL, PHP - install, configure, administerGlobal Computer Maintenance Department