Here are a handful of PHP snippets to put in your template.php file to allow Drupal to use different page templates depending on your URL alias. It will also take the URL alias and add that to the bodyclasses array to help with customizing different pages through CSS. This is the best combination of snippets I have found to use in a completely custom theme. Just replace the four instances of THEMENAME with the name of your theme.

Note - these snippets are for the most part gathered from the Zen theme and various drupal.org nodes, but are collected together to help aid in creating a completely custom theme.

<?php
function THEMENAME_preprocess_page(&$vars) {

// Classes for body element. Allows advanced theming based on context
// (home page, node of certain type, etc.)
  $body_classes = array($vars['body_classes']);
  if (!$vars['is_front']) {
    // Add unique classes for each page and website section
    $path = drupal_get_path_alias($_GET['q']);
    list($section, ) = explode('/', $path, 2);
    $body_classes[] = THEMENAME_id_safe('page-' . $path);
    $body_classes[] = THEMENAME_id_safe('section-' . $section);
    if (arg(0) == 'node') {
      if (arg(1) == 'add') {
        if ($section == 'node') {
          array_pop($body_classes); // Remove 'section-node'
        }
        $body_classes[] = 'section-node-add'; // Add 'section-node-add'
      }
      elseif (is_numeric(arg(1)) && (arg(2) == 'edit' || arg(2) == 'delete')) {
        if ($section == 'node') {
          array_pop($body_classes); // Remove 'section-node'
        }
        $body_classes[] = 'section-node-' . arg(2); // Add 'section-node-edit' or 'section-node-delete'
      }
    }
  }
  $vars['body_classes'] = implode(' ', $body_classes); // Concatenate with spaces



if (module_exists('path')) {
  $alias = drupal_get_path_alias(str_replace('/edit','',$_GET['q']));
    if ($alias != $_GET['q']) {
      $suggestions = array();
      $template_filename = 'page';
        foreach (explode('/', $alias) as $path_part) {
          $template_filename = $template_filename . '-' . $path_part;
          $suggestions[] = $template_filename;
        }
      $vars['template_files'] = $suggestions;
    }
  }
}

function THEMENAME_id_safe($string) {
  if (is_numeric($string{0})) {
    // If the first character is numeric, add 'n' in front
    $string = 'n'. $string;
  }
  return strtolower(preg_replace('/[^a-zA-Z0-9_-]+/', '-', $string));
}