Apache 2 on Ubuntu
There are two methods for setting up Drupal 5.x/6.x with Apache on Ubuntu. The first (preferred) method edits the 'Virtual Host configuration, which is the default setup on Ubuntu (even for a single-site webserver). The second edits the main apache2.conf, which is typical for an older setup.
Method 1: 'Virtual Host' setup
First, from the linux command line, enable the rewrite module for apache with this command:
sudo a2enmod rewrite
Next, use an editor (such as nano) to edit the appropriate Apache configuration file for your Drupal site in the /etc/apache2/sites-available/ directory. For a single site, the file is /etc/apache2/sites-available/default; if you have multiple sites, the file names should reflect the names of the sites to which they refer. Thus, to edit the default site configuration, use
sudo nano /etc/apache2/sites-available/default
Look for the Directory section referring to the folder where your Drupal site lives (in /etc/apache2/sites-available/default, this is typically <Directory /var/www>), and change the line:
AllowOverride None
to
AllowOverride All
(See a href="https://help.ubuntu.com/community/EnablingUseOfApacheHtaccessFiles">https://help.ubuntu.com/community/EnablingUseOfApacheHtaccessFiles for more information).
Save this file and then reload apache.
sudo /etc/init.d/apache2 reload
Sub Domain Setup
An alternative to multiple virtual hosts files is to use subdomains. This allows you to use a wild-card in the Server Alias. This allows for both a simple multi-site Drupal setup, as well as multi Drupal versions. Instead of multiple virtual hosts files, you define a subdomain for each drupal profile.
Consider the following and modify your configuration file to fit your needs.
Here is an example of a partial listing of a virtual host configuration file that would support the last two lines in the above example. Note this is not intended to be a COMPLETE configuration file, but rather provide guidance for your development setup.
<VirtualHost *>
DocumentRoot "/www/Dr6"
ServerName example
ServerAlias *.dr6.example
<Directory "/www/Dr6">
AllowOverride All
</Directory>Edit & save your config file to suit your development needs. Assuming the site is already enabled, then reload Apache.
Method 2: apache2.conf
Then you have to enabled the rewrite module(mod_rewrite). You no longer have to do the:
LoadModule rewrite_module modules/mod_rewrite.so
AddModule mod_rewrite.c
It's now as easy as:
sudo a2enmod rewrite
To disable this module it's just:
sudo a2dismod rewrite
with Apache version 2, the httpd.conf has been deprecated and the new file is located at:
/etc/apache2/apache2.conf
in this file you need to add your directory and the allow override to give access to your drupal site.
so look for a section in your apache2.conf that has Directory tags and just add another section:
<Directory /var/www/drupal_website_install>
AllowOverride all
</Directory>*keep in mind that my website is in a subdirectory (drupal_website_install) and so you may need to edit the above to reflect this. By this I mean if i go into my webbrowser I need to go to http://localhost/drupal_website_install/
After you edit you apache2.conf as listed above you need to restart the server by:
/etc/init.d/apache2 reload
Problems with Rewrite
If you are having problems with getting your rewrite to work you can always use logging. To do that add this to the end of /etc/apache2/apache2.conf:
RewriteLog "/var/log/apache2/rewrite.log"
RewriteLogLevel 3Level 0 is no logging
Level 9 is log everything
You can pick the level to determine the amount of output you need.
***Security Warning: Make sure to take the log code out, disable it, or put the log file in a directory that can't be read by normal users (as shown above) otherwise it can result in a security breach.***
hopefully this helps some people and saves them the time that I spent trying to get it working.
Finish - Enable Clean URLs
Now browse to your site, login, click administer, find "Clean URLs" and browse to that page, run the test for "Clean URLs" (In Drupal 4.6 - 5.x this is buried in the paragraph explaining "clean Urls").
If your setup is like mine, you should now have Clean URLs in drupal.

solution for ubuntu gutsy
Here is what I did to have clean urls with ubuntu gutsy:
a2enmod rewrite
and then added the following lines before line:
<Directory /var/www/>in '/etc/apache2/sites-available/default':
<Directory /var/www/drupal>AllowOverride all
RewriteEngine on
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(.+\..+)$ [NC]
RewriteCond %{HTTP_HOST} !^.+\..+\..+$ [NC]
RewriteRule ^(.*)$ http://www.%1/$1 [L,R=301]
RewriteCond %{HTTP_HOST} ^(.*)$ [NC]
RewriteRule ^files/(.*)$ sites/%1/files/$1 [L]
RewriteRule ^files/(.*)$ sites/%1/files/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
</IfModule>
</Directory>
ADVICE: I'm having problems with apache dir mod using this configuration since now index.php has priority over index.html.
Hope to solve it soon
rewrite.conf file did not exist
In trying to puzzle out why this wasn't working for me on Ubuntu Server 7.10, I discovered that the file /etc/apache2/modules-available/rewrite.load was there but the file /etc/apache2/modules-available/rewrite.conf did not exist. I could use the command 'sudo a2enmod rewrite' and the rewrite mod would 'look' enabled, but clean-urls would still not function because there was no .conf file for the rewrite mod.
I created one with nano, added the text...
RewriteEngine On
...to it, and saved it to /etc/apache2/modules-available/rewrite.conf.
Then, I went to /etc/apache2/sites/sites-available/default and changed both the 'Directory /' and 'Directory /var/www/' AllowOverride values from 'None' to 'All', used a2enmod to enable the rewrite mod, restarted Apache2, and I was then able to turn on Clean URLs in my Drupal install.
Cannot get it to enable in Ubuntu 8.10
I'm running Ubuntu 8.10 on Virtual box and use Drupal 6.10. I followed the directions from all posts but I couldn't enable clear URLs.
1) Ran sudo a2enmod rewrite. Module now found in mods-enabled directory. Also, the mod shows when I run apache2ctl -M
2) Updated .../sites-enabled/000-default
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName ubuntusrv
ServerAlias ubuntusrv
DocumentRoot /var/www/
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /var/www/>
RewriteEngine on
RewriteBase /
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
3) Created rewrite.conf file in ../mods-available as stated in previous comment.
I'm out of ideas on how to get clean url to enable. The radio button is still greyed out.
Assistance will be appreciated :) Thanks
UPDATE:
Err, got it to work finally. Modified as follows:
<Directory /var/www/><IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
</IfModule>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
Your fix worked for me too,
Your fix worked for me too, Miggle. I'm running Ubuntu Server 9.0.4.
Thanks!