• This email address is being protected from spambots. You need JavaScript enabled to view it.

User Rating: 5 / 5

Star ActiveStar ActiveStar ActiveStar ActiveStar Active

 Using .htaccess to improve SEO.


In my previous article where I showed how to SEO optimize a Joomla installment, link here: SEO for Joomla.
The article became quite large and I could not dive deeper into the SEO aspect for .htaccess therefor I will dive deeper into .htaccess.
When it comes to web hosting or any kind of website .htaccess will be very important in terms of security what also ties into a higher SEO score.
The .htaccess file has been around since the dawn of time when it comes to HTTP/WWW protocols any can change the behavior of your site.
While configuring an Apache server through the http.conf itself it is rarely you will have access to that file on shared hosting solutions.
But do not worry the .htaccess file is almost as powerful at the http.conf file but it can be tricky to work with.
However in the long run understanding, this file will make your life much easier, and your website much better in the long run.
For Joomla users I have a pre-made .htaccess file you can download, the website you current viewing is configured with the same file.
--> Joomla .htaccess File <-- Remember to rename to .htaccess by removing the .txt extension when placing this in your ROOT.

A guide to the .htaccess file below with some pointers and configurations that might work for you, be sure to make a backup of your original file!
While working on my own SEO score I found numerous articles that cover the subject however with my previous article more information is needed.
Before we start to ensure that if you make an edit to check with your hosts help files there are small variations per host this can lead to errors.
I've added some snippets you will find handy to use, make sure to configure them according to your own taste and test results.

Redirect Everyone Except IP address to an alternate page.

ErrorDocument 403 http://www.yourdomain.com/
Order deny,allow
Deny from all
Allow from

#301 Redirects for .htaccess

#Redirect a single page:
Redirect 301 /pagename.php http://www.domain.com/pagename.html

#Redirect an entire site:
Redirect 301 / http://www.domain.com/

#Redirect an entire site to a sub folder
Redirect 301 / http://www.domain.com/subfolder/

#Redirect a sub folder to another site
Redirect 301 /subfolder http://www.domain.com/

#This will redirect any file with the .html extension to use the same filename but use the .php extension instead.
RedirectMatch 301 (.*)\.html$ http://www.domain.com$1.php

#You can also perform 301 redirects using rewriting via .htaccess.

#Redirect from old domain to new domain
RewriteEngine on
RewriteBase /
RewriteRule (.*) http://www.newdomain.com/$1 [R=301,L]

#Redirect to www location
RewriteEngine on
RewriteBase /
rewritecond %{http_host} ^domain.com [nc]
rewriterule ^(.*)$ http://www.domain.com/$1 [r=301,nc]

#Redirect to www location with subdirectory
RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} domain.com [NC]
RewriteRule ^(.*)$ http://www.domain.com/directory/index.html [R=301,NC]

#Redirect from old domain to new domain with full path and query string:
Options +FollowSymLinks
RewriteEngine On
RewriteRule ^(.*) http://www.newdomain.com%{REQUEST_URI} [R=302,NC]

#Redirect from old domain with subdirectory to new domain w/o subdirectory including full path and query string:
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/subdirname/(.*)$
RewriteRule ^(.*) http://www.katcode.com/%1 [R=302,NC]

#Rewrite and redirect URLs with query parameters (files placed in root directory)

Original URL:

Desired destination URL:

.htaccess syntax:

RewriteEngine on
RewriteCond %{QUERY_STRING} id=1
RewriteRule ^index\.php$ /path-to-new-location/? [L,R=301]
Redirect URLs with query parameters (files placed in subdirectory)

Original URL:

Desired destination URL:

.htaccess syntax:

RewriteEngine on
RewriteCond %{QUERY_STRING} id=1
RewriteRule ^sub-dir/index\.php$ /path-to-new-location/? [L,R=301]
Redirect one clean URL to a new clean URL

Original URL:

Desired destination URL:
.htaccess syntax:

RewriteEngine On
RewriteRule ^old-page/?$ $1/new-page$2 [R=301,L]
Rewrite and redirect URLs with query parameter to directory based structure, retaining query string in URL root level

Original URL:

Desired destination URL:

.htaccess syntax:

RewriteEngine On
RewriteRule ^([^/d]+)/?$ index.php?id=$1 [QSA]
Rewrite URLs with query parameter to directory based structure, retaining query string parameter in URL subdirectory

Original URL:
Desired destination URL:
.htaccess syntax:

RewriteEngine On
RewriteRule ^/?category/([^/d]+)/?$ index.php?category=$1 [L,QSA]
Domain change – redirect all incoming request from old to new domain (retain path)

RewriteEngine on
RewriteCond %{HTTP_HOST} ^example-old\.com$ [NC]
RewriteRule ^(.*)$ http://www.example-new.com/$1 [R=301,L]
If you do not want to pass the path in the request to the new domain, change the last row to:

RewriteRule ^(.*)$ http://www.example-new.com/ [R=301,L]

#From blog.oldsite.com -> www.somewhere.com/blog/
retains path and query, and eliminates xtra blog path if domain is blog.oldsite.com/blog/
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_URI}/ blog
RewriteRule ^(.*) http://www.somewhere.com/%{REQUEST_URI} [R=302,NC]
RewriteRule ^(.*) http://www.somewhere.com/blog/%{REQUEST_URI} [R=302,NC]

Serve all .pdf files on your site using .htaccess and mod_rewrite with the php script.

RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^(.+)\.pdf$ /cgi-bin/pdf.php?file=$1 [L,NC,QSA]
Rewrite to www
RewriteCond %{REQUEST_URI} !^/(robots\.txt|favicon\.ico|sitemap\.xml)$
RewriteCond %{HTTP_HOST} !^www\.yourdomain\.com$ [NC]
RewriteRule ^(.*)$ http://www.yourdomain.com/$1 [R=301,L]

Rewrite to www dynamically.

RewriteCond %{REQUEST_URI} !^/robots\.txt$ [NC]
RewriteCond %{HTTP_HOST} !^www\.[a-z-]+\.[a-z]{2,6} [NC]
RewriteCond %{HTTP_HOST} ([a-z-]+\.[a-z]{2,6})$ [NC]
RewriteRule ^/(.*)$ http://%1/$1 [R=301,L]

Implementing a Caching Scheme with .htaccess

# year
<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|swf|mp3|mp4)$">
Header set Cache-Control "public"
Header set Expires "Thu, 20 Apr 2010 20:00:00 GMT"
Header unset Last-Modified
#2 hours
<FilesMatch "\.(html|htm|xml|txt|xsl)$">
Header set Cache-Control "max-age=7200, must-revalidate"
<FilesMatch "\.(js|css)$">
SetOutputFilter DEFLATE
Header set Expires "Thu, 20 Apr 2010 20:00:00 GMT"

Password Protect a single file.

<Files login.php>
AuthName "Prompt"
AuthType Basic
AuthUserFile /web/askapache.com/.htpasswd
Require valid-user

Password Protect multiple files.

<FilesMatch "^(private|phpinfo).*$"> AuthName "Development" AuthUserFile /.htpasswd AuthType basic Require valid-user </FilesMatch>
Prevent hotlinking.
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?yourdomain\.com/.*$ [NC]
RewriteRule \.(gif|jpg|swf|flv|png)$ http://www.yourdomain.com/feed.

Partial Source Code for 301 rewrites: https://gist.github.com/ScottPhillips/1721489

ROG Ryujin 360

I am writing this article because I could not find much in terms of troubleshooting the new ASUS ROG AIO, this covers the ROG Ryujin
© 2016 -2019 Paul "HisEvilness" Ripmeester. All Rights Reserved.