Marius van Witzenburg We fight for our survival, we fight!

11Nov/110

Apache Error Codes

Posted by mariusvw

With the function below you can add your own custom actions to error statuses of Apache.

Lets say you want a custom 404 error page. You could redirect a user upon a 404 error or show a complete different layout.

/**
 * HTTP Protocol defined status codes
 * @param int $num
 */
function HTTPStatus($num) {
   static $http = array (
       100 => "HTTP/1.1 100 Continue",
       101 => "HTTP/1.1 101 Switching Protocols",
       200 => "HTTP/1.1 200 OK",
       201 => "HTTP/1.1 201 Created",
       202 => "HTTP/1.1 202 Accepted",
       203 => "HTTP/1.1 203 Non-Authoritative Information",
       204 => "HTTP/1.1 204 No Content",
       205 => "HTTP/1.1 205 Reset Content",
       206 => "HTTP/1.1 206 Partial Content",
       300 => "HTTP/1.1 300 Multiple Choices",
       301 => "HTTP/1.1 301 Moved Permanently",
       302 => "HTTP/1.1 302 Found",
       303 => "HTTP/1.1 303 See Other",
       304 => "HTTP/1.1 304 Not Modified",
       305 => "HTTP/1.1 305 Use Proxy",
       307 => "HTTP/1.1 307 Temporary Redirect",
       400 => "HTTP/1.1 400 Bad Request",
       401 => "HTTP/1.1 401 Unauthorized",
       402 => "HTTP/1.1 402 Payment Required",
       403 => "HTTP/1.1 403 Forbidden",
       404 => "HTTP/1.1 404 Not Found",
       405 => "HTTP/1.1 405 Method Not Allowed",
       406 => "HTTP/1.1 406 Not Acceptable",
       407 => "HTTP/1.1 407 Proxy Authentication Required",
       408 => "HTTP/1.1 408 Request Time-out",
       409 => "HTTP/1.1 409 Conflict",
       410 => "HTTP/1.1 410 Gone",
       411 => "HTTP/1.1 411 Length Required",
       412 => "HTTP/1.1 412 Precondition Failed",
       413 => "HTTP/1.1 413 Request Entity Too Large",
       414 => "HTTP/1.1 414 Request-URI Too Large",
       415 => "HTTP/1.1 415 Unsupported Media Type",
       416 => "HTTP/1.1 416 Requested range not satisfiable",
       417 => "HTTP/1.1 417 Expectation Failed",
       500 => "HTTP/1.1 500 Internal Server Error",
       501 => "HTTP/1.1 501 Not Implemented",
       502 => "HTTP/1.1 502 Bad Gateway",
       503 => "HTTP/1.1 503 Service Unavailable",
       504 => "HTTP/1.1 504 Gateway Time-out"
   );
 
   header($http[$num]);
}
?>

You can download this 404 error page example to play with.

Tagged as: , , , No Comments
6Jul/110

How to generate a .htaccess and .htpasswd with PHP

Posted by mariusvw

Ever had a moment where you needed to secure a directory but didn't have the htpasswd tool available?

The following script simply generates a .htaccess and .htpasswd file to secure a directory.

<!DOCTYPE html>
<html>
<body>
<?php if (!empty($_POST['username']) && !empty($_POST['password'])): ?>
<strong>.htaccess</strong><br>
<pre>
AuthName "Members only"
AuthType Basic
AuthUserFile /srv/www/domain.tld/.htpasswd
require valid-user
</pre> 
Save the above file in the directory you want to secure.<br>
<br>
<strong>.htpasswd</strong><br>
<pre>
<?php echo $_POST['username'] . ':' . crypt($_POST['password'], base64_encode($_POST['password'])); ?>
</pre>
Save the above file as <strong>/srv/www/domain.tld/.htpasswd</strong>.<br>
<br>
<a href="<?php echo $_SERVER['PHP_SELF']; ?>">&laquo; BACK &laquo;</a>
<?php else: ?>
<form method="post">
Username: <input type="text" name="username"><br>
Password: <input type="text" name="password"><br>
<input type="submit">
</form>
</form>
<?php endif; ?>
</body>
</html>
30Jun/100

How to force your visitors to goto your website domain without www as a prefix with mod_rewrite in Apache

Posted by mariusvw

Actually this is quite simple, you need to create a .htaccess file into your public_html / httpdocs directory and add the following piece of code:

Force non-www

# Force non-www
RewriteEngine On
RewriteCond %{HTTP_HOST} !^kitara.nl
RewriteRule (.*) http://kitara.nl/$1 [R=301,L]

Force www

# Force www
RewriteCond %{HTTP_HOST} !^www.kitara.nl
RewriteRule (.*) http://www.kitara.nl/$1 [R=301,L]

Of course you need to modify this to match your own domain name :-)

28Mar/100

How to limit the bandwidth of Apache with mod_bw on FreeBSD

Posted by mariusvw

First you have to install mod_bw:

cd /usr/ports/www/mod_bw
make install

Then open your httpd.conf and locate

#LoadModule bw_module          libexec/apache22/mod_bw.so

Remove the comment like this:

LoadModule bw_module libexec/apache22/mod_bw.so

Then you can add the following to your VirtualHost or global configuration to limit a directory speed, in my case I want to limit the band files where we host our demo materials width a limit of 50kb/s.

1
2
3
4
5
6
7
<directory /home/mariusvw/public_html/band>
    <ifmodule mod_bw.c>
        BandWidthModule On
        ForceBandWidthModule On
        Bandwidth all 50000
    </ifmodule>
</directory>

This is an example how you can globally limit all the traffic of your Apache installation.

1
2
3
4
5
<ifmodule mod_bw.c>
    BandWidthModule On
    ForceBandWidthModule On
    Bandwidth all 50000
</ifmodule>

For more info on this you can open the readme, which is located at:

/usr/local/share/doc/mod_bw/mod_bw.txt