The default unclean URLs that Drupal provides with question marks lurking around, could be annoying. But it does offer an option to have clean URLs. I couldn’t find a neat tutorial to do this and this was not of great help either. So, let us see how to get this done.
Step 1
Check whether the rewrite module for your apache is enabled. Assuming you have an apache2 installation, you can do this by
ls /etc/apache2/mods-enabled/
If you don’t find rewrite.load, it means that the rewrite module is not enabled. Drupal’s clean URLs feature requires this module to be enabled. If you have a Debian based machine,
sudo a2enmod
Which module would you like to enable?
Your choices are: actions alias asis auth_basic auth_digest authn_alias authn_anon authn_dbd authn_dbm authn_default authn_file authnz_ldap authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache cern_meta cgid cgi charset_lite dav_fs dav dav_lock dbd deflate dir disk_cache dump_io env expires ext_filter file_cache filter headers ident imagemap include info ldap log_forensic mem_cache mime mime_magic negotiation php5 proxy_ajp proxy_balancer proxy_connect proxy_ftp proxy_http proxy rewrite setenvif speling ssl status suexec unique_id userdir usertrack version vhost_alias
Module name?rewrite
Module rewrite installed; run /etc/init.d/apache2 force-reload to enable.
This can also be done like this (say for a non-Debian based OS):
cd /etc/apache2/mods-enabled
sudo ln -s ../mods-available/rewrite.load rewrite.load
There! We have enabled the rewrite module for apache.
Step 2
We have to edit /etc/apache2/sites-available/default. Look out for the following lines.
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
Change AllowOverride None to AllowOverride All. Save the File.
Step 3
Make sure that the .htaccess file under your Drupal installation folder has the following lines
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
</IfModule>
Step 4
Restart the apache server
sudo /etc/init.d/apache2 restart
Step 5
Go to your Drupal administration page for clean URLs and enable them.
