Hi I have configured Virtual host on apache with .htaccess authentication with SSL. It's working fine when I typed url https://www.example.com:9004/test.php but when I typed http://www.example.com:9004/test.php I am getting this error:

Bad Request

Your browser sent a request that this server could not understand.
Reason: You're speaking plain HTTP to an SSL-enabled server port.
Instead use the HTTPS scheme to access this URL, please.
Hint: https://www.example.com/  

My httpd.conf file look like this:

 Listen 9004
<VirtualHost *:9004>
    ServerAdmin root@localhost
    DocumentRoot /mnt/work/httpd
    <Directory "/mnt/work/httpd">
    Options FollowSymLinks
     AllowOverride AuthConfig
  SSLEngine On
  SSLCertificateKeyFile /mnt/work/httpd/www.example.com.key
  SSLCertificateFile /mnt/work/httpd/www.example.com.crt
#RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://www.example.com:9006%{REQUEST_URI}
    ServerName www.example.com
    ErrorLog "/mnt/work/log/error_log"
    CustomLog "/mnt/work/log/access_log" combined

And my /etc/httpd/conf.d/ssl.conf file is:

LoadModule ssl_module modules/mod_ssl.so

# When we also provide SSL we have to listen to the
# the HTTPS port in addition.
Listen 9006

And Mmy .htaccess file is:

AuthType Digest
AuthName "Protected"
AuthDigestProvider file
AuthGroupFile /dev/null
AuthUserFile /mnt/work/httpd/digest_auth
Require user johan

What should I do so that when I hit http:/www.example.com:9004/test.php it will automatically redirect to https://www.example.com:9004/test.php.

2 Answers 2

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

Should do the trick.

  • 1
    Hi Its not Working Same error Occurred Bad Request...
    – Akki
    May 16, 2013 at 9:25

It seems you want 9004 for https; 9006 for http; You should redirect http connection on 9004 port to https connection on same 9004 port.

However your config redirects http://example.com:9004 to https://example.com:9006 which does not make much sense since 9006 port is for http. Just replace 9006 by 9004 in your RewriteRule.

Some additional info on url redirection: http://wiki.apache.org/httpd/RedirectSSL

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.