Enable mod_rewrite for Apache on CentOS 7

The mod_rewrite module is enabled by default on CentOS 7. If you find it is not enabled on your server, you can enable it by editing 00-base.conf file located in /etc/httpd/conf.modules.d/ directory.

sudo nano /etc/httpd/conf.modules.d/00-base.conf

Add or uncomment the following line:

LoadModule rewrite_module modules/mod_rewrite.so

Save and close the file, then restart the httpd service:

sudo systemctl restart httpd

Enable .htaccess File

Once the mod_rewrite module has been activated, you can set up your URL rewrites by creating an .htaccess file in your default document root directory. A .htaccess file allows us to modify our rewrite rules without accessing server configuration files. For this reason, .htaccess is critical to your web server. Before we begin, we need to allow Apache to read .htaccess files located under the /var/www/html directory.

You can do this by editing httpd.conf file:

sudo nano /etc/httpd/conf/httpd.conf

Find the section <directory /var/www/html> and change AllowOverride None to AllowOverride All

<Directory /var/www/html>
AllowOverride All

Save and exit.

Now restart Apache to put the change into effect:

sudo systemctl restart httpd

Configure Rewrite Module

In this section, we will explain basic mod_rewrite syntax and give some examples.

Redirect www to non-www

If you want to redirect users from www to a plain non-www domain, you will need to create .htaccess file in Apache document root directory.

Change directories to your Document root:

cd /var/www/html

Create the .htaccess file:

sudo nano .htaccess

Add the following content:

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

Save and exit the file.

We can use curl to test that the www domain redirects to the non-www domain:

curl -I http://www.yourdomain.com

You should see the following output:

HTTP/1.1 301 Moved Permanently
Date: Mon, 03 May 2016 18:20:53 GMT
Server: Apache/2.4.6 (CentOS)
Location: http://yourdomain.com/
Content-Type: text/html; charset=iso-8859-1

Above output shows the non-www redirect location http://yourdomain.com/

Redirect All Website Pages

If you want to redirect all pages from “olddomain.com” to “newdomain.com”, edit the .htaccess file:

sudo nano /var/www/html/.htaccess

Add the following content:

Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.olddomain.com$ [OR]
RewriteCond %{HTTP_HOST} ^olddomain.com$
RewriteRule ^(.*)$ http://www.newdomain.com/$1 [R=301,L]

Save and exit the file.

Now, use curl to test that the “www.olddomain.com” domain redirects to the “www.newdomain.com” domain:

curl -I http://www.olddomain.com

You should get a 301 Moved Permanently response that shows you the new domain redirect location.

Deny File Type Access

If you want to deny users to access specific file types such as: .pdf, .css, .gif, .png, or .bmp then edit your .htacces file:

sudo nano /var/www/html/.htaccess

Add the following content:

RewriteEngine on
RewriteRule .*\.(pdf|css|gif|png|bmp)$ - [F,NC]

Save and exit the file.

Src: https://devops.ionos.com/tutorials/install-and-configure-mod_rewrite-for-apache-on-centos-7/


Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.