issues in creating 301 redirects in Apache 2.4.3x using htaccess











up vote
0
down vote

favorite












I have recently upgraded my website from http to https protocol.



I have added the following code to my .htaccess file to redirect all http traffic to https on my website.



RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]


Now when i search for articles on my website using google (which were previously indexed by google when the site was using http protocol.) and click on the search results it is redirected to https://www.example.com.



For eg :



if i click on the http://www.example.com/my-article-1 (or type it in browser bar) it would redirect to https://www.example.com.



I would want to redirect all those http links to https



For eg :



if i click on the http://www.example.com/my-article-1 it should go to https://www.example.com/my-article-1



I tried creating 301 redirects in the .htaccess file



redirect  /my-article-1 https://www.example.com/my-article-1


I didnt work.The above code was added right below the first code in this question



How do i create a proper 301 redirect for all my webpages ?



I am using Linux hosting with Apache 2.4.33 and a Drupal 7 CMS running the website.



I have clean URLS Enabled in my Drupal CMS



I found out about an article in Drupal org about putting clean URLs and tried the following combinations



# Various rewrite rules.

<IfModule mod_rewrite.c>

RewriteEngine on



# Added by Me


RewriteBase /

#RewriteRule ^/(.*)$ https://www.domain.in/serial-programming-tutorials [R=301,L]

#Above statement redirects to https://www.domain.in/



#RewriteRule ^serial-programming-tutorials$ https://www.domain.in/serial-programming-tutorials [R=301,L]

#Above statement gives "The page isn’t redirecting properly" Error in Browser



#RewriteRule ^/serial-programming-tutorials$ https://www.domain.in/serial-programming-tutorials [R=301,L]

#Above statement redirects to https://www.domain.in/


Below is my .htaccess file.



#
# Apache/PHP/Drupal settings:
#

# Protect files and directories from prying eyes.
<FilesMatch ".(engine|inc|info|install|make|module|profile|test|po|sh|.*sql|theme|tpl(.php)?|xtmpl)(~|.sw[op]|.bak|.orig|.save)?$|^(.(?!well-known).*|Entries.*|Repository|Root|Tag|Template|composer.(json|lock))$|^#.*#$|.php(~|.sw[op]|.bak|.orig.save)$">
<IfModule mod_authz_core.c>
Require all denied
</IfModule>
<IfModule !mod_authz_core.c>
Order allow,deny
</IfModule>
</FilesMatch>

# Don't show directory listings for URLs which map to a directory.
Options -Indexes

# Follow symbolic links in this directory.
Options +FollowSymLinks

# Make Drupal handle any 404 errors.
ErrorDocument 404 /index.php

# Set the default handler.
DirectoryIndex index.php index.html index.htm

# Override PHP settings that cannot be changed at runtime. See
# sites/default/default.settings.php and drupal_environment_initialize() in
# includes/bootstrap.inc for settings that can be changed at runtime.

# PHP 5, Apache 1 and 2.
<IfModule mod_php5.c>
php_flag magic_quotes_gpc off
php_flag magic_quotes_sybase off
php_flag register_globals off
php_flag session.auto_start off
php_value mbstring.http_input pass
php_value mbstring.http_output pass
php_flag mbstring.encoding_translation off
</IfModule>

# Requires mod_expires to be enabled.
<IfModule mod_expires.c>
# Enable expirations.
ExpiresActive On

# Cache all files for 2 weeks after access (A).
ExpiresDefault A1209600

<FilesMatch .php$>
# Do not allow PHP scripts to be cached unless they explicitly send cache
# headers themselves. Otherwise all scripts would have to overwrite the
# headers set by mod_expires if they want another caching behavior. This may
# fail if an error occurs early in the bootstrap process, and it may cause
# problems if a non-Drupal PHP file is installed in a subdirectory.
ExpiresActive Off
</FilesMatch>
</IfModule>



# Various rewrite rules.
<IfModule mod_rewrite.c>
RewriteEngine on

# Added by Me

RewriteBase /
#RewriteRule ^/(.*)$ https://www.domain.in/serial-programming-tutorials [R=301,L]
#Above statement redirects to https://www.xanthium.in/

#RewriteRule ^serial-programming-tutorials$ https://www.domain.in/serial-programming-tutorials [R=301,L]
#Above statement gives "The page isn’t redirecting properly" Error in Browser

#RewriteRule ^/serial-programming-tutorials$ https://www.domain.in/serial-programming-tutorials [R=301,L]
#Above statement redirects to https://www.domain.in/

# Set "protossl" to "s" if we were accessed via https://. This is used later
# if you enable "www." stripping or enforcement, in order to ensure that
# you don't bounce between http and https.
RewriteRule ^ - [E=protossl]
RewriteCond %{HTTPS} on
RewriteRule ^ - [E=protossl:s]

# Make sure Authorization HTTP header is available to PHP
# even when running as CGI or FastCGI.
RewriteRule ^ - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

# Block access to "hidden" directories whose names begin with a period. This
# includes directories used by version control systems such as Subversion or
# Git to store control files. Files whose names begin with a period, as well
# as the control files used by CVS, are protected by the FilesMatch directive
# above.
#
# NOTE: This only works when mod_rewrite is loaded. Without mod_rewrite, it is
# not possible to block access to entire directories from .htaccess, because
# <DirectoryMatch> is not allowed here.
#
# If you do not have mod_rewrite installed, you should remove these
# directories from your webroot or otherwise protect them from being
# downloaded.
RewriteRule "/.|^.(?!well-known/)" - [F]

# If your site can be accessed both with and without the 'www.' prefix, you
# can use one of the following settings to redirect users to your preferred
# URL, either WITH or WITHOUT the 'www.' prefix. Choose ONLY one option:
#
# To redirect all users to access the site WITH the 'www.' prefix,
# (http://example.com/... will be redirected to http://www.example.com/...)
# uncomment the following:
# RewriteCond %{HTTP_HOST} .
# RewriteCond %{HTTP_HOST} !^www. [NC]
# RewriteRule ^ http%{ENV:protossl}://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
#
# To redirect all users to access the site WITHOUT the 'www.' prefix,
# (http://www.example.com/... will be redirected to http://example.com/...)
# uncomment the following:
# RewriteCond %{HTTP_HOST} ^www.(.+)$ [NC]
# RewriteRule ^ http%{ENV:protossl}://%1%{REQUEST_URI} [L,R=301]

# Modify the RewriteBase if you are using Drupal in a subdirectory or in a
# VirtualDocumentRoot and the rewrite rules are not working properly.
# For example if your site is at http://example.com/drupal uncomment and
# modify the following line:
# RewriteBase /drupal
#
# If your site is running in a VirtualDocumentRoot at http://example.com/,
# uncomment the following line:
# RewriteBase /



# Pass all requests not referring directly to files in the filesystem to
# index.php. Clean URLs are handled in drupal_environment_initialize().
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^ index.php [L]

# Rules to correctly serve gzip compressed CSS and JS files.
# Requires both mod_rewrite and mod_headers to be enabled.
<IfModule mod_headers.c>
# Serve gzip compressed CSS files if they exist and the client accepts gzip.
RewriteCond %{HTTP:Accept-encoding} gzip
RewriteCond %{REQUEST_FILENAME}.gz -s
RewriteRule ^(.*).css $1.css.gz [QSA]

# Serve gzip compressed JS files if they exist and the client accepts gzip.
RewriteCond %{HTTP:Accept-encoding} gzip
RewriteCond %{REQUEST_FILENAME}.gz -s
RewriteRule ^(.*).js $1.js.gz [QSA]

# Serve correct content types, and prevent mod_deflate double gzip.
RewriteRule .css.gz$ - [T=text/css,E=no-gzip:1]
RewriteRule .js.gz$ - [T=text/javascript,E=no-gzip:1]

<FilesMatch "(.js.gz|.css.gz)$">
# Serve correct encoding type.
Header set Content-Encoding gzip
# Force proxies to cache gzipped & non-gzipped css/js files separately.
Header append Vary Accept-Encoding
</FilesMatch>
</IfModule>
</IfModule>

# Add headers to all responses.
<IfModule mod_headers.c>
# Disable content sniffing, since it's an attack vector.
Header always set X-Content-Type-Options nosniff
</IfModule>

RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.domain.in/$1 [R=301,L]









share|improve this question
























  • The first rule you posted should already do what you require, so you may have a conflict with other directives. Please posted your entire .htaccess file. (Incidentally, the second rule you posted is a 302 redirect, not a 301. But you should always test with 302s anyway to avoid caching issues.)
    – MrWhite
    Nov 8 at 19:15










  • @MrWhite I have made a few changes and posted the .htaccess file
    – Rahul.In
    Nov 11 at 2:27















up vote
0
down vote

favorite












I have recently upgraded my website from http to https protocol.



I have added the following code to my .htaccess file to redirect all http traffic to https on my website.



RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]


Now when i search for articles on my website using google (which were previously indexed by google when the site was using http protocol.) and click on the search results it is redirected to https://www.example.com.



For eg :



if i click on the http://www.example.com/my-article-1 (or type it in browser bar) it would redirect to https://www.example.com.



I would want to redirect all those http links to https



For eg :



if i click on the http://www.example.com/my-article-1 it should go to https://www.example.com/my-article-1



I tried creating 301 redirects in the .htaccess file



redirect  /my-article-1 https://www.example.com/my-article-1


I didnt work.The above code was added right below the first code in this question



How do i create a proper 301 redirect for all my webpages ?



I am using Linux hosting with Apache 2.4.33 and a Drupal 7 CMS running the website.



I have clean URLS Enabled in my Drupal CMS



I found out about an article in Drupal org about putting clean URLs and tried the following combinations



# Various rewrite rules.

<IfModule mod_rewrite.c>

RewriteEngine on



# Added by Me


RewriteBase /

#RewriteRule ^/(.*)$ https://www.domain.in/serial-programming-tutorials [R=301,L]

#Above statement redirects to https://www.domain.in/



#RewriteRule ^serial-programming-tutorials$ https://www.domain.in/serial-programming-tutorials [R=301,L]

#Above statement gives "The page isn’t redirecting properly" Error in Browser



#RewriteRule ^/serial-programming-tutorials$ https://www.domain.in/serial-programming-tutorials [R=301,L]

#Above statement redirects to https://www.domain.in/


Below is my .htaccess file.



#
# Apache/PHP/Drupal settings:
#

# Protect files and directories from prying eyes.
<FilesMatch ".(engine|inc|info|install|make|module|profile|test|po|sh|.*sql|theme|tpl(.php)?|xtmpl)(~|.sw[op]|.bak|.orig|.save)?$|^(.(?!well-known).*|Entries.*|Repository|Root|Tag|Template|composer.(json|lock))$|^#.*#$|.php(~|.sw[op]|.bak|.orig.save)$">
<IfModule mod_authz_core.c>
Require all denied
</IfModule>
<IfModule !mod_authz_core.c>
Order allow,deny
</IfModule>
</FilesMatch>

# Don't show directory listings for URLs which map to a directory.
Options -Indexes

# Follow symbolic links in this directory.
Options +FollowSymLinks

# Make Drupal handle any 404 errors.
ErrorDocument 404 /index.php

# Set the default handler.
DirectoryIndex index.php index.html index.htm

# Override PHP settings that cannot be changed at runtime. See
# sites/default/default.settings.php and drupal_environment_initialize() in
# includes/bootstrap.inc for settings that can be changed at runtime.

# PHP 5, Apache 1 and 2.
<IfModule mod_php5.c>
php_flag magic_quotes_gpc off
php_flag magic_quotes_sybase off
php_flag register_globals off
php_flag session.auto_start off
php_value mbstring.http_input pass
php_value mbstring.http_output pass
php_flag mbstring.encoding_translation off
</IfModule>

# Requires mod_expires to be enabled.
<IfModule mod_expires.c>
# Enable expirations.
ExpiresActive On

# Cache all files for 2 weeks after access (A).
ExpiresDefault A1209600

<FilesMatch .php$>
# Do not allow PHP scripts to be cached unless they explicitly send cache
# headers themselves. Otherwise all scripts would have to overwrite the
# headers set by mod_expires if they want another caching behavior. This may
# fail if an error occurs early in the bootstrap process, and it may cause
# problems if a non-Drupal PHP file is installed in a subdirectory.
ExpiresActive Off
</FilesMatch>
</IfModule>



# Various rewrite rules.
<IfModule mod_rewrite.c>
RewriteEngine on

# Added by Me

RewriteBase /
#RewriteRule ^/(.*)$ https://www.domain.in/serial-programming-tutorials [R=301,L]
#Above statement redirects to https://www.xanthium.in/

#RewriteRule ^serial-programming-tutorials$ https://www.domain.in/serial-programming-tutorials [R=301,L]
#Above statement gives "The page isn’t redirecting properly" Error in Browser

#RewriteRule ^/serial-programming-tutorials$ https://www.domain.in/serial-programming-tutorials [R=301,L]
#Above statement redirects to https://www.domain.in/

# Set "protossl" to "s" if we were accessed via https://. This is used later
# if you enable "www." stripping or enforcement, in order to ensure that
# you don't bounce between http and https.
RewriteRule ^ - [E=protossl]
RewriteCond %{HTTPS} on
RewriteRule ^ - [E=protossl:s]

# Make sure Authorization HTTP header is available to PHP
# even when running as CGI or FastCGI.
RewriteRule ^ - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

# Block access to "hidden" directories whose names begin with a period. This
# includes directories used by version control systems such as Subversion or
# Git to store control files. Files whose names begin with a period, as well
# as the control files used by CVS, are protected by the FilesMatch directive
# above.
#
# NOTE: This only works when mod_rewrite is loaded. Without mod_rewrite, it is
# not possible to block access to entire directories from .htaccess, because
# <DirectoryMatch> is not allowed here.
#
# If you do not have mod_rewrite installed, you should remove these
# directories from your webroot or otherwise protect them from being
# downloaded.
RewriteRule "/.|^.(?!well-known/)" - [F]

# If your site can be accessed both with and without the 'www.' prefix, you
# can use one of the following settings to redirect users to your preferred
# URL, either WITH or WITHOUT the 'www.' prefix. Choose ONLY one option:
#
# To redirect all users to access the site WITH the 'www.' prefix,
# (http://example.com/... will be redirected to http://www.example.com/...)
# uncomment the following:
# RewriteCond %{HTTP_HOST} .
# RewriteCond %{HTTP_HOST} !^www. [NC]
# RewriteRule ^ http%{ENV:protossl}://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
#
# To redirect all users to access the site WITHOUT the 'www.' prefix,
# (http://www.example.com/... will be redirected to http://example.com/...)
# uncomment the following:
# RewriteCond %{HTTP_HOST} ^www.(.+)$ [NC]
# RewriteRule ^ http%{ENV:protossl}://%1%{REQUEST_URI} [L,R=301]

# Modify the RewriteBase if you are using Drupal in a subdirectory or in a
# VirtualDocumentRoot and the rewrite rules are not working properly.
# For example if your site is at http://example.com/drupal uncomment and
# modify the following line:
# RewriteBase /drupal
#
# If your site is running in a VirtualDocumentRoot at http://example.com/,
# uncomment the following line:
# RewriteBase /



# Pass all requests not referring directly to files in the filesystem to
# index.php. Clean URLs are handled in drupal_environment_initialize().
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^ index.php [L]

# Rules to correctly serve gzip compressed CSS and JS files.
# Requires both mod_rewrite and mod_headers to be enabled.
<IfModule mod_headers.c>
# Serve gzip compressed CSS files if they exist and the client accepts gzip.
RewriteCond %{HTTP:Accept-encoding} gzip
RewriteCond %{REQUEST_FILENAME}.gz -s
RewriteRule ^(.*).css $1.css.gz [QSA]

# Serve gzip compressed JS files if they exist and the client accepts gzip.
RewriteCond %{HTTP:Accept-encoding} gzip
RewriteCond %{REQUEST_FILENAME}.gz -s
RewriteRule ^(.*).js $1.js.gz [QSA]

# Serve correct content types, and prevent mod_deflate double gzip.
RewriteRule .css.gz$ - [T=text/css,E=no-gzip:1]
RewriteRule .js.gz$ - [T=text/javascript,E=no-gzip:1]

<FilesMatch "(.js.gz|.css.gz)$">
# Serve correct encoding type.
Header set Content-Encoding gzip
# Force proxies to cache gzipped & non-gzipped css/js files separately.
Header append Vary Accept-Encoding
</FilesMatch>
</IfModule>
</IfModule>

# Add headers to all responses.
<IfModule mod_headers.c>
# Disable content sniffing, since it's an attack vector.
Header always set X-Content-Type-Options nosniff
</IfModule>

RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.domain.in/$1 [R=301,L]









share|improve this question
























  • The first rule you posted should already do what you require, so you may have a conflict with other directives. Please posted your entire .htaccess file. (Incidentally, the second rule you posted is a 302 redirect, not a 301. But you should always test with 302s anyway to avoid caching issues.)
    – MrWhite
    Nov 8 at 19:15










  • @MrWhite I have made a few changes and posted the .htaccess file
    – Rahul.In
    Nov 11 at 2:27













up vote
0
down vote

favorite









up vote
0
down vote

favorite











I have recently upgraded my website from http to https protocol.



I have added the following code to my .htaccess file to redirect all http traffic to https on my website.



RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]


Now when i search for articles on my website using google (which were previously indexed by google when the site was using http protocol.) and click on the search results it is redirected to https://www.example.com.



For eg :



if i click on the http://www.example.com/my-article-1 (or type it in browser bar) it would redirect to https://www.example.com.



I would want to redirect all those http links to https



For eg :



if i click on the http://www.example.com/my-article-1 it should go to https://www.example.com/my-article-1



I tried creating 301 redirects in the .htaccess file



redirect  /my-article-1 https://www.example.com/my-article-1


I didnt work.The above code was added right below the first code in this question



How do i create a proper 301 redirect for all my webpages ?



I am using Linux hosting with Apache 2.4.33 and a Drupal 7 CMS running the website.



I have clean URLS Enabled in my Drupal CMS



I found out about an article in Drupal org about putting clean URLs and tried the following combinations



# Various rewrite rules.

<IfModule mod_rewrite.c>

RewriteEngine on



# Added by Me


RewriteBase /

#RewriteRule ^/(.*)$ https://www.domain.in/serial-programming-tutorials [R=301,L]

#Above statement redirects to https://www.domain.in/



#RewriteRule ^serial-programming-tutorials$ https://www.domain.in/serial-programming-tutorials [R=301,L]

#Above statement gives "The page isn’t redirecting properly" Error in Browser



#RewriteRule ^/serial-programming-tutorials$ https://www.domain.in/serial-programming-tutorials [R=301,L]

#Above statement redirects to https://www.domain.in/


Below is my .htaccess file.



#
# Apache/PHP/Drupal settings:
#

# Protect files and directories from prying eyes.
<FilesMatch ".(engine|inc|info|install|make|module|profile|test|po|sh|.*sql|theme|tpl(.php)?|xtmpl)(~|.sw[op]|.bak|.orig|.save)?$|^(.(?!well-known).*|Entries.*|Repository|Root|Tag|Template|composer.(json|lock))$|^#.*#$|.php(~|.sw[op]|.bak|.orig.save)$">
<IfModule mod_authz_core.c>
Require all denied
</IfModule>
<IfModule !mod_authz_core.c>
Order allow,deny
</IfModule>
</FilesMatch>

# Don't show directory listings for URLs which map to a directory.
Options -Indexes

# Follow symbolic links in this directory.
Options +FollowSymLinks

# Make Drupal handle any 404 errors.
ErrorDocument 404 /index.php

# Set the default handler.
DirectoryIndex index.php index.html index.htm

# Override PHP settings that cannot be changed at runtime. See
# sites/default/default.settings.php and drupal_environment_initialize() in
# includes/bootstrap.inc for settings that can be changed at runtime.

# PHP 5, Apache 1 and 2.
<IfModule mod_php5.c>
php_flag magic_quotes_gpc off
php_flag magic_quotes_sybase off
php_flag register_globals off
php_flag session.auto_start off
php_value mbstring.http_input pass
php_value mbstring.http_output pass
php_flag mbstring.encoding_translation off
</IfModule>

# Requires mod_expires to be enabled.
<IfModule mod_expires.c>
# Enable expirations.
ExpiresActive On

# Cache all files for 2 weeks after access (A).
ExpiresDefault A1209600

<FilesMatch .php$>
# Do not allow PHP scripts to be cached unless they explicitly send cache
# headers themselves. Otherwise all scripts would have to overwrite the
# headers set by mod_expires if they want another caching behavior. This may
# fail if an error occurs early in the bootstrap process, and it may cause
# problems if a non-Drupal PHP file is installed in a subdirectory.
ExpiresActive Off
</FilesMatch>
</IfModule>



# Various rewrite rules.
<IfModule mod_rewrite.c>
RewriteEngine on

# Added by Me

RewriteBase /
#RewriteRule ^/(.*)$ https://www.domain.in/serial-programming-tutorials [R=301,L]
#Above statement redirects to https://www.xanthium.in/

#RewriteRule ^serial-programming-tutorials$ https://www.domain.in/serial-programming-tutorials [R=301,L]
#Above statement gives "The page isn’t redirecting properly" Error in Browser

#RewriteRule ^/serial-programming-tutorials$ https://www.domain.in/serial-programming-tutorials [R=301,L]
#Above statement redirects to https://www.domain.in/

# Set "protossl" to "s" if we were accessed via https://. This is used later
# if you enable "www." stripping or enforcement, in order to ensure that
# you don't bounce between http and https.
RewriteRule ^ - [E=protossl]
RewriteCond %{HTTPS} on
RewriteRule ^ - [E=protossl:s]

# Make sure Authorization HTTP header is available to PHP
# even when running as CGI or FastCGI.
RewriteRule ^ - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

# Block access to "hidden" directories whose names begin with a period. This
# includes directories used by version control systems such as Subversion or
# Git to store control files. Files whose names begin with a period, as well
# as the control files used by CVS, are protected by the FilesMatch directive
# above.
#
# NOTE: This only works when mod_rewrite is loaded. Without mod_rewrite, it is
# not possible to block access to entire directories from .htaccess, because
# <DirectoryMatch> is not allowed here.
#
# If you do not have mod_rewrite installed, you should remove these
# directories from your webroot or otherwise protect them from being
# downloaded.
RewriteRule "/.|^.(?!well-known/)" - [F]

# If your site can be accessed both with and without the 'www.' prefix, you
# can use one of the following settings to redirect users to your preferred
# URL, either WITH or WITHOUT the 'www.' prefix. Choose ONLY one option:
#
# To redirect all users to access the site WITH the 'www.' prefix,
# (http://example.com/... will be redirected to http://www.example.com/...)
# uncomment the following:
# RewriteCond %{HTTP_HOST} .
# RewriteCond %{HTTP_HOST} !^www. [NC]
# RewriteRule ^ http%{ENV:protossl}://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
#
# To redirect all users to access the site WITHOUT the 'www.' prefix,
# (http://www.example.com/... will be redirected to http://example.com/...)
# uncomment the following:
# RewriteCond %{HTTP_HOST} ^www.(.+)$ [NC]
# RewriteRule ^ http%{ENV:protossl}://%1%{REQUEST_URI} [L,R=301]

# Modify the RewriteBase if you are using Drupal in a subdirectory or in a
# VirtualDocumentRoot and the rewrite rules are not working properly.
# For example if your site is at http://example.com/drupal uncomment and
# modify the following line:
# RewriteBase /drupal
#
# If your site is running in a VirtualDocumentRoot at http://example.com/,
# uncomment the following line:
# RewriteBase /



# Pass all requests not referring directly to files in the filesystem to
# index.php. Clean URLs are handled in drupal_environment_initialize().
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^ index.php [L]

# Rules to correctly serve gzip compressed CSS and JS files.
# Requires both mod_rewrite and mod_headers to be enabled.
<IfModule mod_headers.c>
# Serve gzip compressed CSS files if they exist and the client accepts gzip.
RewriteCond %{HTTP:Accept-encoding} gzip
RewriteCond %{REQUEST_FILENAME}.gz -s
RewriteRule ^(.*).css $1.css.gz [QSA]

# Serve gzip compressed JS files if they exist and the client accepts gzip.
RewriteCond %{HTTP:Accept-encoding} gzip
RewriteCond %{REQUEST_FILENAME}.gz -s
RewriteRule ^(.*).js $1.js.gz [QSA]

# Serve correct content types, and prevent mod_deflate double gzip.
RewriteRule .css.gz$ - [T=text/css,E=no-gzip:1]
RewriteRule .js.gz$ - [T=text/javascript,E=no-gzip:1]

<FilesMatch "(.js.gz|.css.gz)$">
# Serve correct encoding type.
Header set Content-Encoding gzip
# Force proxies to cache gzipped & non-gzipped css/js files separately.
Header append Vary Accept-Encoding
</FilesMatch>
</IfModule>
</IfModule>

# Add headers to all responses.
<IfModule mod_headers.c>
# Disable content sniffing, since it's an attack vector.
Header always set X-Content-Type-Options nosniff
</IfModule>

RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.domain.in/$1 [R=301,L]









share|improve this question















I have recently upgraded my website from http to https protocol.



I have added the following code to my .htaccess file to redirect all http traffic to https on my website.



RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]


Now when i search for articles on my website using google (which were previously indexed by google when the site was using http protocol.) and click on the search results it is redirected to https://www.example.com.



For eg :



if i click on the http://www.example.com/my-article-1 (or type it in browser bar) it would redirect to https://www.example.com.



I would want to redirect all those http links to https



For eg :



if i click on the http://www.example.com/my-article-1 it should go to https://www.example.com/my-article-1



I tried creating 301 redirects in the .htaccess file



redirect  /my-article-1 https://www.example.com/my-article-1


I didnt work.The above code was added right below the first code in this question



How do i create a proper 301 redirect for all my webpages ?



I am using Linux hosting with Apache 2.4.33 and a Drupal 7 CMS running the website.



I have clean URLS Enabled in my Drupal CMS



I found out about an article in Drupal org about putting clean URLs and tried the following combinations



# Various rewrite rules.

<IfModule mod_rewrite.c>

RewriteEngine on



# Added by Me


RewriteBase /

#RewriteRule ^/(.*)$ https://www.domain.in/serial-programming-tutorials [R=301,L]

#Above statement redirects to https://www.domain.in/



#RewriteRule ^serial-programming-tutorials$ https://www.domain.in/serial-programming-tutorials [R=301,L]

#Above statement gives "The page isn’t redirecting properly" Error in Browser



#RewriteRule ^/serial-programming-tutorials$ https://www.domain.in/serial-programming-tutorials [R=301,L]

#Above statement redirects to https://www.domain.in/


Below is my .htaccess file.



#
# Apache/PHP/Drupal settings:
#

# Protect files and directories from prying eyes.
<FilesMatch ".(engine|inc|info|install|make|module|profile|test|po|sh|.*sql|theme|tpl(.php)?|xtmpl)(~|.sw[op]|.bak|.orig|.save)?$|^(.(?!well-known).*|Entries.*|Repository|Root|Tag|Template|composer.(json|lock))$|^#.*#$|.php(~|.sw[op]|.bak|.orig.save)$">
<IfModule mod_authz_core.c>
Require all denied
</IfModule>
<IfModule !mod_authz_core.c>
Order allow,deny
</IfModule>
</FilesMatch>

# Don't show directory listings for URLs which map to a directory.
Options -Indexes

# Follow symbolic links in this directory.
Options +FollowSymLinks

# Make Drupal handle any 404 errors.
ErrorDocument 404 /index.php

# Set the default handler.
DirectoryIndex index.php index.html index.htm

# Override PHP settings that cannot be changed at runtime. See
# sites/default/default.settings.php and drupal_environment_initialize() in
# includes/bootstrap.inc for settings that can be changed at runtime.

# PHP 5, Apache 1 and 2.
<IfModule mod_php5.c>
php_flag magic_quotes_gpc off
php_flag magic_quotes_sybase off
php_flag register_globals off
php_flag session.auto_start off
php_value mbstring.http_input pass
php_value mbstring.http_output pass
php_flag mbstring.encoding_translation off
</IfModule>

# Requires mod_expires to be enabled.
<IfModule mod_expires.c>
# Enable expirations.
ExpiresActive On

# Cache all files for 2 weeks after access (A).
ExpiresDefault A1209600

<FilesMatch .php$>
# Do not allow PHP scripts to be cached unless they explicitly send cache
# headers themselves. Otherwise all scripts would have to overwrite the
# headers set by mod_expires if they want another caching behavior. This may
# fail if an error occurs early in the bootstrap process, and it may cause
# problems if a non-Drupal PHP file is installed in a subdirectory.
ExpiresActive Off
</FilesMatch>
</IfModule>



# Various rewrite rules.
<IfModule mod_rewrite.c>
RewriteEngine on

# Added by Me

RewriteBase /
#RewriteRule ^/(.*)$ https://www.domain.in/serial-programming-tutorials [R=301,L]
#Above statement redirects to https://www.xanthium.in/

#RewriteRule ^serial-programming-tutorials$ https://www.domain.in/serial-programming-tutorials [R=301,L]
#Above statement gives "The page isn’t redirecting properly" Error in Browser

#RewriteRule ^/serial-programming-tutorials$ https://www.domain.in/serial-programming-tutorials [R=301,L]
#Above statement redirects to https://www.domain.in/

# Set "protossl" to "s" if we were accessed via https://. This is used later
# if you enable "www." stripping or enforcement, in order to ensure that
# you don't bounce between http and https.
RewriteRule ^ - [E=protossl]
RewriteCond %{HTTPS} on
RewriteRule ^ - [E=protossl:s]

# Make sure Authorization HTTP header is available to PHP
# even when running as CGI or FastCGI.
RewriteRule ^ - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

# Block access to "hidden" directories whose names begin with a period. This
# includes directories used by version control systems such as Subversion or
# Git to store control files. Files whose names begin with a period, as well
# as the control files used by CVS, are protected by the FilesMatch directive
# above.
#
# NOTE: This only works when mod_rewrite is loaded. Without mod_rewrite, it is
# not possible to block access to entire directories from .htaccess, because
# <DirectoryMatch> is not allowed here.
#
# If you do not have mod_rewrite installed, you should remove these
# directories from your webroot or otherwise protect them from being
# downloaded.
RewriteRule "/.|^.(?!well-known/)" - [F]

# If your site can be accessed both with and without the 'www.' prefix, you
# can use one of the following settings to redirect users to your preferred
# URL, either WITH or WITHOUT the 'www.' prefix. Choose ONLY one option:
#
# To redirect all users to access the site WITH the 'www.' prefix,
# (http://example.com/... will be redirected to http://www.example.com/...)
# uncomment the following:
# RewriteCond %{HTTP_HOST} .
# RewriteCond %{HTTP_HOST} !^www. [NC]
# RewriteRule ^ http%{ENV:protossl}://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
#
# To redirect all users to access the site WITHOUT the 'www.' prefix,
# (http://www.example.com/... will be redirected to http://example.com/...)
# uncomment the following:
# RewriteCond %{HTTP_HOST} ^www.(.+)$ [NC]
# RewriteRule ^ http%{ENV:protossl}://%1%{REQUEST_URI} [L,R=301]

# Modify the RewriteBase if you are using Drupal in a subdirectory or in a
# VirtualDocumentRoot and the rewrite rules are not working properly.
# For example if your site is at http://example.com/drupal uncomment and
# modify the following line:
# RewriteBase /drupal
#
# If your site is running in a VirtualDocumentRoot at http://example.com/,
# uncomment the following line:
# RewriteBase /



# Pass all requests not referring directly to files in the filesystem to
# index.php. Clean URLs are handled in drupal_environment_initialize().
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^ index.php [L]

# Rules to correctly serve gzip compressed CSS and JS files.
# Requires both mod_rewrite and mod_headers to be enabled.
<IfModule mod_headers.c>
# Serve gzip compressed CSS files if they exist and the client accepts gzip.
RewriteCond %{HTTP:Accept-encoding} gzip
RewriteCond %{REQUEST_FILENAME}.gz -s
RewriteRule ^(.*).css $1.css.gz [QSA]

# Serve gzip compressed JS files if they exist and the client accepts gzip.
RewriteCond %{HTTP:Accept-encoding} gzip
RewriteCond %{REQUEST_FILENAME}.gz -s
RewriteRule ^(.*).js $1.js.gz [QSA]

# Serve correct content types, and prevent mod_deflate double gzip.
RewriteRule .css.gz$ - [T=text/css,E=no-gzip:1]
RewriteRule .js.gz$ - [T=text/javascript,E=no-gzip:1]

<FilesMatch "(.js.gz|.css.gz)$">
# Serve correct encoding type.
Header set Content-Encoding gzip
# Force proxies to cache gzipped & non-gzipped css/js files separately.
Header append Vary Accept-Encoding
</FilesMatch>
</IfModule>
</IfModule>

# Add headers to all responses.
<IfModule mod_headers.c>
# Disable content sniffing, since it's an attack vector.
Header always set X-Content-Type-Options nosniff
</IfModule>

RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.domain.in/$1 [R=301,L]






apache .htaccess redirect drupal-7 web-hosting






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 14 at 23:39

























asked Nov 8 at 14:48









Rahul.In

85




85












  • The first rule you posted should already do what you require, so you may have a conflict with other directives. Please posted your entire .htaccess file. (Incidentally, the second rule you posted is a 302 redirect, not a 301. But you should always test with 302s anyway to avoid caching issues.)
    – MrWhite
    Nov 8 at 19:15










  • @MrWhite I have made a few changes and posted the .htaccess file
    – Rahul.In
    Nov 11 at 2:27


















  • The first rule you posted should already do what you require, so you may have a conflict with other directives. Please posted your entire .htaccess file. (Incidentally, the second rule you posted is a 302 redirect, not a 301. But you should always test with 302s anyway to avoid caching issues.)
    – MrWhite
    Nov 8 at 19:15










  • @MrWhite I have made a few changes and posted the .htaccess file
    – Rahul.In
    Nov 11 at 2:27
















The first rule you posted should already do what you require, so you may have a conflict with other directives. Please posted your entire .htaccess file. (Incidentally, the second rule you posted is a 302 redirect, not a 301. But you should always test with 302s anyway to avoid caching issues.)
– MrWhite
Nov 8 at 19:15




The first rule you posted should already do what you require, so you may have a conflict with other directives. Please posted your entire .htaccess file. (Incidentally, the second rule you posted is a 302 redirect, not a 301. But you should always test with 302s anyway to avoid caching issues.)
– MrWhite
Nov 8 at 19:15












@MrWhite I have made a few changes and posted the .htaccess file
– Rahul.In
Nov 11 at 2:27




@MrWhite I have made a few changes and posted the .htaccess file
– Rahul.In
Nov 11 at 2:27












2 Answers
2






active

oldest

votes

















up vote
0
down vote



accepted










You have put the HTTP to HTTPS redirect in the wrong place. It needs to go at the top of your .htaccess file, not at the end.



By placing it at the end, the Drupal "front-controller" has already rewritten the request to index.php. The later HTTP to HTTPS redirect then converts this to an external redirect (in the next round of processing) and essentially redirects everything to the document root.



The order of (mod_rewrite) directives in .htaccess is important.






share|improve this answer



















  • 1




    Thank You for your help ,It is now working perfectly.
    – Rahul.In
    Nov 14 at 23:35


















up vote
0
down vote













The order of how the statements are posted is important to the functioning of the .htaccess file as pointed out by @MrWhite.



I have changed my htaccess file as shown below to solve the problem.



# Various rewrite rules.
<IfModule mod_rewrite.c>
RewriteEngine on

#------------------------------------------------------------------#
# Added by to redirect all http to https
# Placing it here solved my problem
#------------------------------------------------------------------#
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.domain.in/$1 [R=301,L]
#-------------------------------------------------------------------#


# Set "protossl" to "s" if we were accessed via https://. This is used later
# if you enable "www." stripping or enforcement, in order to ensure that
# you don't bounce between http and https.
RewriteRule ^ - [E=protossl]
RewriteCond %{HTTPS} on
RewriteRule ^ - [E=protossl:s]



# If your site can be accessed both with and without the 'www.' prefix, you
# can use one of the following settings to redirect users to your preferred
# URL, either WITH or WITHOUT the 'www.' prefix. Choose ONLY one option:
#
# To redirect all users to access the site WITH the 'www.' prefix,
# (http://example.com/... will be redirected to http://www.example.com/...)
# uncomment the following:
RewriteCond %{HTTP_HOST} .
RewriteCond %{HTTP_HOST} !^www. [NC]
RewriteRule ^ http%{ENV:protossl}://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]


Placing the below statement just below IfModule mod_rewrite.c (in .htaccess file)as shown solved all my problems



<IfModule mod_rewrite.c>
RewriteEngine on

#------------------------------------------------------------------#
# Added by to redirect all http to https
# Placing it here solved my problem
#------------------------------------------------------------------#
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.domain.in/$1 [R=301,L]
#-------------------------------------------------------------------#


Now



http://www.domain.in redirects to https://www.domain.in
and



http://www.domain.in/tutorial-1 redirects to https://www.domain.in/tutorial-1






share|improve this answer





















    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














     

    draft saved


    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53210144%2fissues-in-creating-301-redirects-in-apache-2-4-3x-using-htaccess%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    2 Answers
    2






    active

    oldest

    votes








    2 Answers
    2






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes








    up vote
    0
    down vote



    accepted










    You have put the HTTP to HTTPS redirect in the wrong place. It needs to go at the top of your .htaccess file, not at the end.



    By placing it at the end, the Drupal "front-controller" has already rewritten the request to index.php. The later HTTP to HTTPS redirect then converts this to an external redirect (in the next round of processing) and essentially redirects everything to the document root.



    The order of (mod_rewrite) directives in .htaccess is important.






    share|improve this answer



















    • 1




      Thank You for your help ,It is now working perfectly.
      – Rahul.In
      Nov 14 at 23:35















    up vote
    0
    down vote



    accepted










    You have put the HTTP to HTTPS redirect in the wrong place. It needs to go at the top of your .htaccess file, not at the end.



    By placing it at the end, the Drupal "front-controller" has already rewritten the request to index.php. The later HTTP to HTTPS redirect then converts this to an external redirect (in the next round of processing) and essentially redirects everything to the document root.



    The order of (mod_rewrite) directives in .htaccess is important.






    share|improve this answer



















    • 1




      Thank You for your help ,It is now working perfectly.
      – Rahul.In
      Nov 14 at 23:35













    up vote
    0
    down vote



    accepted







    up vote
    0
    down vote



    accepted






    You have put the HTTP to HTTPS redirect in the wrong place. It needs to go at the top of your .htaccess file, not at the end.



    By placing it at the end, the Drupal "front-controller" has already rewritten the request to index.php. The later HTTP to HTTPS redirect then converts this to an external redirect (in the next round of processing) and essentially redirects everything to the document root.



    The order of (mod_rewrite) directives in .htaccess is important.






    share|improve this answer














    You have put the HTTP to HTTPS redirect in the wrong place. It needs to go at the top of your .htaccess file, not at the end.



    By placing it at the end, the Drupal "front-controller" has already rewritten the request to index.php. The later HTTP to HTTPS redirect then converts this to an external redirect (in the next round of processing) and essentially redirects everything to the document root.



    The order of (mod_rewrite) directives in .htaccess is important.







    share|improve this answer














    share|improve this answer



    share|improve this answer








    edited Nov 12 at 11:57

























    answered Nov 12 at 11:44









    MrWhite

    11.9k33059




    11.9k33059








    • 1




      Thank You for your help ,It is now working perfectly.
      – Rahul.In
      Nov 14 at 23:35














    • 1




      Thank You for your help ,It is now working perfectly.
      – Rahul.In
      Nov 14 at 23:35








    1




    1




    Thank You for your help ,It is now working perfectly.
    – Rahul.In
    Nov 14 at 23:35




    Thank You for your help ,It is now working perfectly.
    – Rahul.In
    Nov 14 at 23:35












    up vote
    0
    down vote













    The order of how the statements are posted is important to the functioning of the .htaccess file as pointed out by @MrWhite.



    I have changed my htaccess file as shown below to solve the problem.



    # Various rewrite rules.
    <IfModule mod_rewrite.c>
    RewriteEngine on

    #------------------------------------------------------------------#
    # Added by to redirect all http to https
    # Placing it here solved my problem
    #------------------------------------------------------------------#
    RewriteEngine On
    RewriteCond %{SERVER_PORT} 80
    RewriteRule ^(.*)$ https://www.domain.in/$1 [R=301,L]
    #-------------------------------------------------------------------#


    # Set "protossl" to "s" if we were accessed via https://. This is used later
    # if you enable "www." stripping or enforcement, in order to ensure that
    # you don't bounce between http and https.
    RewriteRule ^ - [E=protossl]
    RewriteCond %{HTTPS} on
    RewriteRule ^ - [E=protossl:s]



    # If your site can be accessed both with and without the 'www.' prefix, you
    # can use one of the following settings to redirect users to your preferred
    # URL, either WITH or WITHOUT the 'www.' prefix. Choose ONLY one option:
    #
    # To redirect all users to access the site WITH the 'www.' prefix,
    # (http://example.com/... will be redirected to http://www.example.com/...)
    # uncomment the following:
    RewriteCond %{HTTP_HOST} .
    RewriteCond %{HTTP_HOST} !^www. [NC]
    RewriteRule ^ http%{ENV:protossl}://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]


    Placing the below statement just below IfModule mod_rewrite.c (in .htaccess file)as shown solved all my problems



    <IfModule mod_rewrite.c>
    RewriteEngine on

    #------------------------------------------------------------------#
    # Added by to redirect all http to https
    # Placing it here solved my problem
    #------------------------------------------------------------------#
    RewriteEngine On
    RewriteCond %{SERVER_PORT} 80
    RewriteRule ^(.*)$ https://www.domain.in/$1 [R=301,L]
    #-------------------------------------------------------------------#


    Now



    http://www.domain.in redirects to https://www.domain.in
    and



    http://www.domain.in/tutorial-1 redirects to https://www.domain.in/tutorial-1






    share|improve this answer

























      up vote
      0
      down vote













      The order of how the statements are posted is important to the functioning of the .htaccess file as pointed out by @MrWhite.



      I have changed my htaccess file as shown below to solve the problem.



      # Various rewrite rules.
      <IfModule mod_rewrite.c>
      RewriteEngine on

      #------------------------------------------------------------------#
      # Added by to redirect all http to https
      # Placing it here solved my problem
      #------------------------------------------------------------------#
      RewriteEngine On
      RewriteCond %{SERVER_PORT} 80
      RewriteRule ^(.*)$ https://www.domain.in/$1 [R=301,L]
      #-------------------------------------------------------------------#


      # Set "protossl" to "s" if we were accessed via https://. This is used later
      # if you enable "www." stripping or enforcement, in order to ensure that
      # you don't bounce between http and https.
      RewriteRule ^ - [E=protossl]
      RewriteCond %{HTTPS} on
      RewriteRule ^ - [E=protossl:s]



      # If your site can be accessed both with and without the 'www.' prefix, you
      # can use one of the following settings to redirect users to your preferred
      # URL, either WITH or WITHOUT the 'www.' prefix. Choose ONLY one option:
      #
      # To redirect all users to access the site WITH the 'www.' prefix,
      # (http://example.com/... will be redirected to http://www.example.com/...)
      # uncomment the following:
      RewriteCond %{HTTP_HOST} .
      RewriteCond %{HTTP_HOST} !^www. [NC]
      RewriteRule ^ http%{ENV:protossl}://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]


      Placing the below statement just below IfModule mod_rewrite.c (in .htaccess file)as shown solved all my problems



      <IfModule mod_rewrite.c>
      RewriteEngine on

      #------------------------------------------------------------------#
      # Added by to redirect all http to https
      # Placing it here solved my problem
      #------------------------------------------------------------------#
      RewriteEngine On
      RewriteCond %{SERVER_PORT} 80
      RewriteRule ^(.*)$ https://www.domain.in/$1 [R=301,L]
      #-------------------------------------------------------------------#


      Now



      http://www.domain.in redirects to https://www.domain.in
      and



      http://www.domain.in/tutorial-1 redirects to https://www.domain.in/tutorial-1






      share|improve this answer























        up vote
        0
        down vote










        up vote
        0
        down vote









        The order of how the statements are posted is important to the functioning of the .htaccess file as pointed out by @MrWhite.



        I have changed my htaccess file as shown below to solve the problem.



        # Various rewrite rules.
        <IfModule mod_rewrite.c>
        RewriteEngine on

        #------------------------------------------------------------------#
        # Added by to redirect all http to https
        # Placing it here solved my problem
        #------------------------------------------------------------------#
        RewriteEngine On
        RewriteCond %{SERVER_PORT} 80
        RewriteRule ^(.*)$ https://www.domain.in/$1 [R=301,L]
        #-------------------------------------------------------------------#


        # Set "protossl" to "s" if we were accessed via https://. This is used later
        # if you enable "www." stripping or enforcement, in order to ensure that
        # you don't bounce between http and https.
        RewriteRule ^ - [E=protossl]
        RewriteCond %{HTTPS} on
        RewriteRule ^ - [E=protossl:s]



        # If your site can be accessed both with and without the 'www.' prefix, you
        # can use one of the following settings to redirect users to your preferred
        # URL, either WITH or WITHOUT the 'www.' prefix. Choose ONLY one option:
        #
        # To redirect all users to access the site WITH the 'www.' prefix,
        # (http://example.com/... will be redirected to http://www.example.com/...)
        # uncomment the following:
        RewriteCond %{HTTP_HOST} .
        RewriteCond %{HTTP_HOST} !^www. [NC]
        RewriteRule ^ http%{ENV:protossl}://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]


        Placing the below statement just below IfModule mod_rewrite.c (in .htaccess file)as shown solved all my problems



        <IfModule mod_rewrite.c>
        RewriteEngine on

        #------------------------------------------------------------------#
        # Added by to redirect all http to https
        # Placing it here solved my problem
        #------------------------------------------------------------------#
        RewriteEngine On
        RewriteCond %{SERVER_PORT} 80
        RewriteRule ^(.*)$ https://www.domain.in/$1 [R=301,L]
        #-------------------------------------------------------------------#


        Now



        http://www.domain.in redirects to https://www.domain.in
        and



        http://www.domain.in/tutorial-1 redirects to https://www.domain.in/tutorial-1






        share|improve this answer












        The order of how the statements are posted is important to the functioning of the .htaccess file as pointed out by @MrWhite.



        I have changed my htaccess file as shown below to solve the problem.



        # Various rewrite rules.
        <IfModule mod_rewrite.c>
        RewriteEngine on

        #------------------------------------------------------------------#
        # Added by to redirect all http to https
        # Placing it here solved my problem
        #------------------------------------------------------------------#
        RewriteEngine On
        RewriteCond %{SERVER_PORT} 80
        RewriteRule ^(.*)$ https://www.domain.in/$1 [R=301,L]
        #-------------------------------------------------------------------#


        # Set "protossl" to "s" if we were accessed via https://. This is used later
        # if you enable "www." stripping or enforcement, in order to ensure that
        # you don't bounce between http and https.
        RewriteRule ^ - [E=protossl]
        RewriteCond %{HTTPS} on
        RewriteRule ^ - [E=protossl:s]



        # If your site can be accessed both with and without the 'www.' prefix, you
        # can use one of the following settings to redirect users to your preferred
        # URL, either WITH or WITHOUT the 'www.' prefix. Choose ONLY one option:
        #
        # To redirect all users to access the site WITH the 'www.' prefix,
        # (http://example.com/... will be redirected to http://www.example.com/...)
        # uncomment the following:
        RewriteCond %{HTTP_HOST} .
        RewriteCond %{HTTP_HOST} !^www. [NC]
        RewriteRule ^ http%{ENV:protossl}://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]


        Placing the below statement just below IfModule mod_rewrite.c (in .htaccess file)as shown solved all my problems



        <IfModule mod_rewrite.c>
        RewriteEngine on

        #------------------------------------------------------------------#
        # Added by to redirect all http to https
        # Placing it here solved my problem
        #------------------------------------------------------------------#
        RewriteEngine On
        RewriteCond %{SERVER_PORT} 80
        RewriteRule ^(.*)$ https://www.domain.in/$1 [R=301,L]
        #-------------------------------------------------------------------#


        Now



        http://www.domain.in redirects to https://www.domain.in
        and



        http://www.domain.in/tutorial-1 redirects to https://www.domain.in/tutorial-1







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 14 at 23:52









        Rahul.In

        85




        85






























             

            draft saved


            draft discarded



















































             


            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53210144%2fissues-in-creating-301-redirects-in-apache-2-4-3x-using-htaccess%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            Full-time equivalent

            Bicuculline

            さくらももこ