Introduction
Apache’s mod_rewrite
module lets you rewrite URLs in a cleaner fashion, translating human-readable paths into code-friendly query strings. It also lets you rewrite URLs based on conditions.
An .htaccess
file lets you create and apply rewrite rules without accessing server configuration files. By placing the .htaccess
file in the root of your web site, you can manage rewrites on a per-site or per-directory basis.
In this tutorial, you’ll enable mod_rewrite
and use .htaccess
files to create a basic URL redirection, and then explore a couple of advanced use cases.
Prerequisites
To follow this tutorial, you will need:
One Ubuntu 18.04 server set up by following the Ubuntu 18.04 initial server setup guide, including a sudo non-root user and a firewall.
Apache installed by following Step 1 of How To Install Linux, Apache, MySQL, PHP (LAMP) stack on Ubuntu 18.04.
Step 1 — Enabling mod_rewrite
In order for Apache to understand rewrite rules, we first need to activate mod_rewrite
. It’s already installed, but it’s disabled on a default Apache installation. Use the a2enmod
command to enable the module:
- sudo a2enmod rewrite
This will activate the module or alert you that the module is already enabled. To put these changes into effect, restart Apache.
- sudo systemctl restart apache2
mod_rewrite
is now fully enabled. In the next step we will set up an .htaccess
file that we’ll use to define rewrite rules for redirects.
Step 2 — Setting Up .htaccess
An .htaccess
file allows us to modify our rewrite rules without accessing server configuration files. For this reason, .htaccess
is critical to your web application’s security. The period that precedes the filename ensures that the file is hidden.
Note: Any rules that you can put in an .htaccess
file can be also put directly into server configuration files. In fact, the official Apache documentation recommends using server configuration files instead of .htaccess
because Apache processes it faster that way.
However, in this simple example, the performance increase will be negligible. Additionally, setting rules in .htaccess
is convenient, especially with multiple websites on the same server. It does not require a server restart for changes to take effect and it does not require root privileges to edit those rules, simplifying maintenance and and making changes possible with unprivileged account. Some popular open-source software, like Wordpress and Joomla, often relies on an .htaccess
file for the software to modify and create additional rules on demand.
Before you start using .htaccess
files, you’ll need to set up and secure a few more settings.
By default, Apache prohibits using an .htaccess
file to apply rewrite rules, so first you need to allow changes to the file. Open the default Apache configuration file using nano
or your favorite text editor.
- sudo nano /etc/apache2/sites-available/000-default.conf
Inside that file, you will find a <VirtualHost *:80>
block starting on the first line. Inside of that block, add the following new block so your configuration file looks like the following. Make sure that all blocks are properly indented.
<VirtualHost *:80>
<Directory /var/www/html>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require all granted
</Directory>
. . .
</VirtualHost>
Save and close the file. To put these changes into effect, restart Apache.
- sudo systemctl restart apache2
Now, create an .htaccess
file in the web root.
- sudo nano /var/www/html/.htaccess
Add this line at the top of the new file to activate the rewrite engine.
RewriteEngine on
Save the file and exit.
You now have an operational .htaccess
file which you can use to govern your web application’s routing rules. In the next step, we will create sample website files that we’ll use to demonstrate rewrite rules.
Step 3 — Configuring URL Rewrites
Here, we will set up a basic URL rewrite which converts pretty URLs into actual paths to pages. Specifically, we will allow users to access http://your_server_ip/about
, but display a page called about.html
.
Begin by creating a file named about.html
in the web root.
- sudo nano /var/www/html/about.html
Copy the following HTML code into the file, then save and close it.
You can access this page at http://your_server_ip/about.html
, but notice that if you try to access http://your_server_ip/about
, you will see a 404 Not Found error. To access the page using /about
instead, we’ll create a rewrite rule.
0 komentar:
Posting Komentar