Redirect subdomain to parameter without wildcard SSL certificate - ssl

I'm trying to do which might be not possible at all.
Let's say I own mydomain.com and have standard (no wildcard) RapidSSL certificate which works for www.mydomain.com and mydomain.com.
I'd like to redirect (.htaccess) subdomain.mydomain.com to mydomain.com/?param=subdomain.
I already managed to redirect it to subdomain.mydomain.com/?param=subdomain but the problem is that on every redirection I get browser warning concerning my certificate which doesn't cover any subdomain.
Is it possible to redirect it without the warning? I need subdomain only for pretty passing the parameter and I don't need it after redirection.

I think you want to capture the subdomain in the URL as shown in the 2nd RewriteCond and then use it as the parameter value:
<IfModule mod_rewrite.c>
Options +FollowSymLinks
Options +Indexes
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !www.mydomain.com$ [NC]
RewriteCond %{HTTP_HOST} ^(www.)?([a-z0-9-]+).mydomain.com [NC]
RewriteRule (.*)?param=%2/$1 [L]
</IfModule>
This is a link to the above solution... http://www.mediacollege.com/internet/server/apache/mod-rewrite/subdomains.html
Hope this helps!

... (no wildcard) RapidSSL certificate which works for www.example.com and example.com .... like to redirect (.htaccess) subdomain.example.com to example.com/?param=subdomain
This is not possible, at least not without warnings about invalid certificates.
The redirection is done within HTTP. But with HTTPS the HTTP layer is embedded inside a SSL layer so that you first have to successfully establish the SSL connection before you can redirect. But to successfully establish the SSL connection you have to have a valid certificate for subdomain.example.com, which you don't have.

Related

How to redirect "https://www.host.com" > "https://host.com" > "https://host..net" (only cert for host.com and host.net)

I've been struggleing to get this redirect to work.
The main website is host.net
And I want www.host.com and host.com to redirect to host.net (site located external on antother server)
I have valid certificates for host.com and host.net but not for www.host.com
I've tried with this setup but the client gives a cert. error.
I've tried many combinations and sometimes I get one or the other to work, but not both redirects.
FROM .conf file example:
<VirtualHost *:443>
..
LogLevel alert rewrite:trace8
RewriteEngine On
RewriteCond %{HTTP_HOST} www.host.com [NC]
RewriteRule ^/$ https://host.com [R=301]
RewriteCond %{HTTP_HOST} host.com [NC]
RewriteRule ^/$ https://host.net [R=301,L]
LOG:
init rewrite engine with requested uri /
applying pattern '^/$' to uri '/'
RewriteCond: input='host.com' pattern='www.host.com' [NC] => not-matched
applying pattern '^/$' to uri '/'
RewriteCond: input='host.com' pattern='host.com' [NC] => matched
rewrite '/' -> 'https://host.net'
explicitly forcing redirect with https://host.net
escaping https://host.net for redirect
redirect to https://host.net [REDIRECT/302]
Assumptions
you have a valid certificate for host.com and host.net
not for www.host.com (like you said)
Scenarios
you ask for https://host.com: you have a valid certificate, so it negotiates ok, and enters your VH. This answers with a redirect to https://host.net. This has a valid certificate, so you are ok.
you ask for https://www.host.com: you do not have a valid certificate, so it complains on negotiation. The negotiation happens before apache considers VH. Once you accept the warning, it enters your VH, which sends you to https://host.net, which is again ok.
Solutions
add a certificate for https://www.host.com
get a certificate to cover both https://host.com and httpd://www.host.com.
only accept connections for www.host.com on port 80, which redirects to https://www.host.net.
Notes
your logs show that your configuration is good, it does what you expect.

301 Redirect in .htaccess gives certificate warning on original URL first

My site has a certificate but it's not a wildcard certificate. So it's for example.com, not for *.example.com.
Not a problem I thought, I'll just redirect any visitor to the proper URL through mod_rewrite:
RewriteEngine On
RewriteBase /
# Following two lines to strip machine name
RewriteCond %{HTTP_HOST} !^example.com [NC]
RewriteRule ^(.*)$ https://example.com%{REQUEST_URI} [L,R=301]
# Following two lines make sure the https version is always served
RewriteCond %{HTTPS} off
RewriteRule (.*) https://example.com%{REQUEST_URI} [L,R=301]
Now, the redirect actually works. When someone types in https://www.example.com/page, he will eventually be redirected to https://example.com/page.
But...
The browser first displays a warning that https://www.example.com is insecure. Only when I add an exception, will it be redirected to https://example.com/page which does not give a certificate error...
What am I doing wrong here?
Nothing. SSL negotiation occurs at the transport (TCP) level, not HTTP (even when using SNI) but the point is that the certificate is not valid for the requested domain. When the connection is initiated to www. the browser will request the certificate and compare the url with the CN in the cert and since it isn't there, it'll raise the alert.
To resolve this issue you will need a certificate that includes both ServerName and ServerAlias names. You could maybe try some DNS provider that offers DNS HTTP redirection, but getting a certificate is quite easy this days.

Apache virtual hosting url redirect from one domain to other domain without showing the url in the browser

Apache virtual hosting url redirect from one domain to other domain without showing the url in the browser?
That's not redirect, that's called Reverse Proxy.
Example:
ProxyPass /url-path/ http://backend.example.com/url-path/
This will reverse proxy all requests to /url-path/whatever to the server backend specified
More information at:
http://httpd.apache.org/docs/2.4/mod/mod_proxy.html
http://httpd.apache.org/docs/2.4/howto/reverse_proxy.html
No, there isn't a way to do this with .htaccess if your sites are on different servers. Doing so would present big security hole, imagine if someone does this with a bankĀ“s website.
However, if both are hosted on the same server try this on your .htaccess file:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^domain1.com$ [OR]
RewriteCond %{HTTP_HOST} ^http://www.domain1.com$
RewriteRule (.*)$ http://www.domain2.com$1 [P]
</IfModule>
If you own both domains you could accomplish this with domain name forwarding. Check the options in your registrar (maybe godaddy, or dns managers like cloudflare).

HTTPS 301 while on CloudFlare w/ Flexible SSL (Apache)

I am trying to have all variations of my root domain 301 (properly) to the https:// version while using CloudFlare w/ Flexible SSL enabled and hosted on an Apache webserver.
My goal is for the following versions to always 301 to https:// domain.tld version ...
http:// domain.tld
http:// www.domain.tld
https:// www.domain.tld
Here is the current code I have...
Options +FollowSymLinks -MultiViews
RewriteEngine on
RewriteCond %{HTTP:CF-Visitor} '"scheme":"http"' [NC]
RewriteRule ^ https://domain.tld%{REQUEST_URI} [R=301,L]
Here is the documentation CloudFlare provides for those on "Flexible SSL"; can someone please assist me with this? It will be useful for almost every domain I have w/ CloudFlare enabled. Thanks!
Why aren't you just trying to use the Always Use Https:// option found in your CloudFlare PageRule settings?

Apache mod_rewrite to merge two domains to one SSL connection

I've got a client who recently changed their name. They had an SSL certificate for their site, and I was using mod_rewrite to ensure all requests to domain1.com and www.domain1.com went to https://domain1.com.
Now that they are domain2.com, I'd like everything to go to https://domain2.com. Not so easy, it turns out. I have everything working right except for requests to https://domain1.com. That doesn't get rewritten and it trips the domain mismatch error for the SSL cert.
Here's my rewrite rules:
RewriteEngine On
RewriteCond %{HTTP_HOST} !^domain2\.com$ [NC]
RewriteRule .? https://domain2.com%{REQUEST_URI} [R=301,L]
Any advice you could provide would be greatly appreciated!
Aaron.
You need a SSL certificate including domain1.com and domain2.com (costs more).