Sometimes you may need to rewrite URL with parameters in Apache server. This is very common requirement for websites & blogs as they keep adding new URLs and retire old ones. You can easily do this using mod_rewrite module in Apache. In this article, we will look at how to redirect one URL to another while preserving the requested URL’s query parameters.
How to Rewrite URL with Parameters in Apache
Here are the steps to rewrite URL with parameters in Apache.
1. Enable mod_rewrite
First, you need to enable mod_rewrite in Apache server, if you have not done it already. Otherwise, based on your Linux distribution, follow the steps below to enable mod_rewrite.
Ubuntu/Debian
Open terminal and run the following command to enable mod_rewrite.
$ sudo a2enmod rewrite
Redhat/CentOS/Fedora
Open Apache configuration file in a text editor.
$ sudo vi /etc/apache2/httpd.conf OR $ sudo vi /etc/httpd/httpd.conf
Look for the following line.
#LoadModule rewrite_module modules/mod_rewrite.so
Uncomment it by removing # at its beginning. If you don’t find this line, add it afresh.
Also look for the following Directory tag and change AllowOverride from None to All.
. . .
<Directory /var/www/html>
. . .
#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
# Options FileInfo AuthConfig Limit
#
AllowOverride All
. . .
</Directory>
. . .
2. Rewrite URL with parameters
Open .htaccess file at your website’s document root.
$ sudo vi /var/www/html/.htaccess
Let us say you want to redirect /product?id=10&category=20 to /items?id=10&category=20 then add the following lines to your .htaccess file.
RewriteEngine On
RewriteRule ^product_id?$ /items?%{QUERY_STRING} [NC,L]
In the above code, the first line enables mod_rewrite if it is not already enabled. Next, the RewriteRule matches URLs starting with /product_id and redirects them to URLs beginning with /items. It also appends the query string from original URL to redirected URL, with the help of QUERY_STRING server variable. QUERY_STRING stores the query string from original requested URL.
3. Restart Apache Server
Restart Apache server to apply changes.
$ sudo service apache2 restart
That’s it. As you can see it is very easy to rewrite URLs with query string parameters. You can modify it according to your requirements.
Also read:
How to Combine Two Files in Linux
How to Rewrite URL to Another URL in Apache
How to Filter Logs By Date/Time in Linux
How to Verify Checksum in Linux
How to Create PDF in Python