How to redirect non-www domain.com to www domain.com(WordPress blog) in AWS Route 53? - amazon-web-services

I have my non-www domain.com with GoDaddy and my WordPress Blog is hosted in AWS EC2. I'm using Route 53 to handle DNS requests. The existing solution for my question, seen in many places(including SOF) is to create two S3 buckets in the name of non-www domain and www domain for redirection of static websites. This is not my case.
I've my WordPress installed in EC2 and not using S3 for holding my Data. I hope this is not a static website and cannot follow the general solutions available.
I tried the following solution around and did not work
I tried changing the C-NAME record to www.domain.com but it did not worked.
I tried domain forward feature available with GoDaddy.com and didn't work.
I tried modifying .htaccess file and that too didn't work.
This is what my record sets in Route 53 look like
Name Type Value TTL
------ ----- ----- ----
domain.com. A xx.xx.xxx.xxx (EIP) 300
domain.com. MX 1 ASPMX.L.GOOGLE.COM 3600
5 ALT1.ASPMX.L.GOOGLE.COM
5 ALT2.ASPMX.L.GOOGLE.COM
10 ALT3.ASPMX.L.GOOGLE.COM
10 ALT4.ASPMX.L.GOOGLE.COM
domain.com. NS ns-27.awsdns-03.com. 172800
ns-1190.awsdns-20.org.
ns-2028.awsdns-61.co.uk.
ns-855.awsdns-42.net.
domain.com. SOA xxxxxxxxx 900
How can I redirect my domain.com to www.domain.com?

I was hesitant to post my comment as an answer because there are a gazillion ways to setup and configure Wordpress it seems. Anyway, to keep in the spirit of keeping this question in the amazon-web-services tag I ran a test case deploying from the AWS Wordpress Cloudformation template. I'm not sure if this is how you actually installed Wordpress but here is one way to redirect:
Make sure that your Cloudformation template completes successfully.
Here is what my Hosted Zone looked like - I have not added A records yet.
Get the instance IP address. Note that in this example I did not setup an Elastic IP. Since I knew that I would not need to stop the instance temporarily I opted to just stick with the automatically assigned, random pubic IP.
Next I made an A record for the domain apex of that IP and then an A record for www. I also changed the TTL to 60 seconds.
Once DNS propagation completed I tried accessing my domain name. As you can see, the AWS Cloudformation Wordpress installation defaults to a different path and URL.
Using the URL, http://example.com/wordpress did the trick.
I didn't go through the steps but when you go to http://example.com/wordpress it starts a setup screen. Enter all the information like DB name and password, etc. and then login to the admin panel. Once you go through all of that you go to the General settings screen. This is where your configuration will probably be different but for mine, the URLs were listed as http://example.com/wordpress. I simply changed these URLs to http://www.example.com/wordpress. (As an aside, I also tried changing and saving the permalink section to generate an .htaccess file but one was not generated due to the inability to write to the file. I tried making my own but I kept running into "too many redirect" messages so this might not be a route you want to take depending on your install.)
You will need to make a change in the index.php file. For my installation it was located at /var/www/html/wordpress/index.php. Make sure to make a copy before changing it. I simply added /wordpress/ in front of wp-blog-header.php. Again, this install puts the Wordpress files in the directory /wordpress - your install will probably be different.
Next you need to copy that modified index.php file to /var/www/html/ and then restart the httpd service.
To test the change I cleared out my DNS cache and opened up the network section of developer tools in Chrome.
I then opened a new tab (have to open developer tools again) and then typed in the naked domain name.
As you can see, the URL redirected to www.example.com with a 301 permanent redirect.
I'll through another suggestion out here while I'm at it. You can use the free version of Cloudflare to just do the redirect for you. Cloudflare offers a bunch of other free and useful services like CDN so if you don't mind depending on a 3rd party service (a reputable one by the way) it might be easier with more value add. As I highlighted in the screenshot however, note that if you use forwarding you cannot use some of the other advanced rule sets.
Anyway, I hope this helps!

Related

AWS Route 53 Domain Point To Github Pages

I am new to working with AWS and route 53 so any help is appreciated.
I have created an organization on GitHub, and then created a simple repository for a static site to display with Github pages. this is working as expected and I can see the static site at the URL generated by Github (something like: https://<githubOrgName>.github.io/<repoName>/)
I got a domain from AWS and now I'm trying to set it up so the apex domain (e.g. "my-domain.com") points to the Github pages site.
I followed the instructions found at: https://docs.github.com/en/pages/configuring-a-custom-domain-for-your-github-pages-site/about-custom-domains-and-github-pages ... but it doesn't seem to be working.
I am trying to make it so that the apex domain points to the repository Github page. something like:
https://my-domain.com -> https://<githubOrgName>.github.io/<repoName>/
... but this only shows a blank screen when I go to the root domain ("my-domain.com"). I have also tried to go to https://my-domain.com/<repoName>/... but this shows me a Github 404 page (so it seems to be correctly forwarding something to Github):
my AWS route 53 configuration is similar to the following (i have tried to remove sensitive details):
can anyone explain to me what I am doing wrong? I am new to working with domains so any help is appreciated.
Using Route53 alone won't help you there, because your target URL contains a URL path i.e. /<repoName>/.
DNS is a name resolution system and knows nothing about HTTP
Furthermore, the origin server (github.io) might be running a reverse proxy which might be parsing the request headers, among which is the Host header. You browser automatically sets this header to the url you feed it. Eventually, you send it the wrong header (i.e. https://my-domain.com/), which Github cannot process. You can explicitly set this header (e.g. via curl) to what Github is expecting, but I believe it's not what you and your users would like.
Instead, you could try using layer 7 redirects (301/302) with the help of Lambda#Edge (provided by AWS CloudFront). I have created a simple solution using the Serverless framework, which does the following redirects:
https://maslick.tech -> https://github.com/maslick
https://maslick.tech/cv -> https://www.linkedin.com/in/maslick/
https://maslick.tech/qa -> https://stackoverflow.com/users/2996867/maslick
https://maslick.tech/ig -> https://www.instagram.com/maslick/
But you can customize it by adjusting handler.js according to your needs. You might also need to create a free TLS certificate using AWS Certificate Manager in the us-east-1 region and attach it to your CloudFront distribution. But this is optional.
Lambda#Edge will give low latencies, since your redirects will be served from CloudFront's edge locations across the globe.
How I got it to work was:
Set a CNAME record from example.org to <USERNAME>/github.io. in the Route 53 console
Set Custom domain to example.org in the Github Pages settings for github.com/<USERNAME>/<REPO>
Note: You shouldn't be setting the CNAME record to <USERNAME>/github.io/<REPO>
Source: https://deanattali.com/blog/multiple-github-pages-domains/

What could cause an app to be stale when accessing it through CNAME alias?

I have a very strange situation where a stale version of my app is being served only when accessing it through its CNAME alias.
The app is a static node app built with Webpack and hosted on Zeit NOW. If I access it using the direct Zeit URL, I get the most recent version and correct JS assets:
https://nates-app.now.sh/index.html -> https://nates-app.now.sh/client/index.eb53e753.js (current)
In AWS Route53, I have a CNAME set up to alias www.nates-app.com to https://nates-app.now.sh. However, pointing my browser to https://www.nates-app.com results in a stale index.html. What's even stranger, is that the stale index.html page reqeusts stale JS and CSS assets, which also are being returned successfully:
https://www.nates-app.com/index.html -> https://www.nates-app.com/client/index.f64812dd.js (stale)
The stale version is more than 48 hours old.
Dig shows nearly identical results. dig nates-app.now.sh results in the following ANSWER section:
;; ANSWER SECTION:
nates-app.now.sh. 60 IN A 1.2.3.4
nates-app.now.sh. 60 IN A 4.3.2.1
dig www.nates-app.com results in identical output, with only the one (expected) addition showing the CNAME in the ANSWER section:
;; ANSWER SECTION:
www.nates-app.com. 300 IN CNAME https://nates-app.now.sh.
nates-app.now.sh. 60 IN A 1.2.3.4
nates-app.now.sh. 60 IN A 4.3.2.1
I'm not using AWS Cloudfront, or any other CDN for static assets.
I've obviously cleared my browser's cache, and even toggled my VPN off and on. A colleague sees the same thing when accessing the internet from a different ISP.
So what in the world wide web could be caching a (very) old version of my site's HTML and accompanying assets?
Very weird, When I have experienced similar issue like this, the solution was always refreshing the browser cache or using an incognito mode. Do you still experience the same
A couple of things:
Zeit doesn't support pointing a CNAME directly at your Zeit subdomain. You need to configure your domain within the Zeit dashboard and setup a verification text record and assign your CNAME to alias.zeit.co. The alias.zeit.co servers route your CNAME to the most current deployment.
It's also possible that, within Zeit's configuration, your domain name is still pointing to an older deployment in your project. Zeit doesn't automatically reassign domain names to new deployments unless you are doing a production deployment, ie., now --prod or you've configured it to treat pushes to a git master branch as production deployments. In your dashboard, click on Projects and then click on the name of your project. If you don't see your domain listed in the most recent deployment, that could be your culprit.

How to resolve "Domain's DNS record could not be retrieved" in GitHub page creation process?

I am trying to create a GitHub page for a repository. But when I gave the custom domain name, it shows the following message "Domain's DNS record could not be retrieved. For more information"
As I am new to GitHub I am not getting the information what is documented in GitHub pages. Could anyone help me to resolve this problem?
If you've recently changed or removed your custom domain and can't access the new URL in your browser, you may need to clear your browser's cache to reach the new custom domain. For more information on clearing your cache, see your browser's help site.
In order to serve the Page, your DNS records must point to GitHub's server. To confirm that your custom domain points to GitHub's servers, use the dig command with your custom domain. The dig command shows you where your custom domain points. For example:
$ dig example.com +nostats +nocomments +nocmd
example.com. 3600 IN A 185.199.108.153
In the example above, example.com points to the IP address 185.199.108.153.
If you configured A records through your DNS provider, your A records must point your custom domain to the following IP addresses:
185.199.108.153
185.199.109.153
185.199.110.153
185.199.111.153
You may see a different IP address, since we serve Pages with a global Content Delivery Network. Use dig username.github.io to see the full resolution path. Note that DNS caching may cause a delay.
If you're using an A record that points to 192.30.252.153 or 192.30.252.154, you'll need to update your DNS settings for your site to be available over HTTPS or served with a Content Delivery Network. For more information, see "HTTPS errors."
If you're using an A record that points to 207.97.227.245 or 204.232.175.78, you'll need to update your DNS settings, as we no longer serve Pages directly from those servers.
Source: https://help.github.com/en/articles/troubleshooting-custom-domains

Route53 WWW Subdomain Not Working

I've looked around trying to fix my website App Opps (appopps.com) to have a www subdomain. I've looked around on Stackoverflow but could not find anything to help me. I tried setting up a redirecting Alias Record Set pointing from www.appopps.com to appopps.com but that hasn't worked.
Error Message:
Record Set setup
Redirect setup
I'm sure I'm missing something super simple here and sorry for the basic question in advance!
EDIT
The www should use the same alias as the primary .com record (presumably your load balancer)
First of all, there's no such thing as a redirecting alias record.
With DNS records you can only achieve a behaviour that both www and apex domain will point to the same location. Any redirection from www to non-www (or vice-versa) is going to happen on a server of some kind. You don't have to provision that server though.
You could for example set a redirect on an S3 bucket (and also distribute it as a CloudFront distribution) to redirect to the desirable domain. Then you'd use the url of the bucket (or distribution) as the target for your Route53 record.
As always with DNS, you have to keep in mind that any changes made to your configuration may take some time to propagate (several hours).

How do I to forward example.com to www.example.com at godaddy for s3 hosted site?

I have:
signed up for an AWS account
set up buckets for example.com and www.example.com
enabled website settings in properties for each domain
set bucket policies for both domains
created this cname record:
www > www.example.com.s3-website-us-east-1.amazonaws.com
Right now when a user goes to www.example.com, they see the index page, and everything is working just fine. When they go to example.com, there is nothing but darknenss and silence because the page just doesn't load (and gives 'connection timeout' error. )
What I want is for example.com to forward to www.example.com so that no matter what the user types in the browser, they see the site that is located at www.example.com.
How do I make this work?
Can I add a record of some kind at godaddy to make example.com redirect to www.example.com?
Do I have to get a static IP to make this work using s3? I keep reading about an elastic IP from EC2, but I am not understanding how I can set that up, or how it would work since I am not using EC2 at all for my website.
I think user Go Daddy's answer was correct, but I'll write up more succinct instructions that I followed to get the forwarding to work for me. I don't know why others are suggesting wwwizer, because GoDaddy uses a 301-redirect too (but maybe it didn't used to?). By the way, this answer isn't specific to Amazon's S3 -- it simply requires you have the "www" CNAME record set correctly.
Login to GoDaddy.com.
Click on My Account.
Click on the Domains product, and click the Launch button next to your domain.
In the Domain Information section you should see "Forwarding: Off". Click the Manage link next to it.
A Forwarding and Masking dialog box should come up. Under Forward example.COM to enter www.example.com.
Click the OK button.
The forwarding kicked in for me within maybe half an hour.
To note, in the dialog box you can change it to forward either "http://" or "https://". I only needed it for "http://", so I'm not sure if GoDaddy will forward both SLL and non-SSL at the same time.
Also, if you're curious, if you click on the Advanced Options link in the Forwarding and Masking dialog box, it should be defaulted to "Forward Only" and have the redirect type set to permanently forward your domain (which is what gives the 301-redirect).
You can use wwwizer's free naked domain redirect service:
http://wwwizer.com/naked-domain-redirect
Just put 174.129.25.170 as the A record for the non-www version of your domain.
fragholrok,
I'm glad you were able to find a way to get your site working. Admittedly, it's a little hard to understand exactly what's going on with your domain name without more specific info, but I wanted to jump in and mention one thing.
You weren't sure if you could forward your domain to the www subdomain. It depends how you have it setup - sometimes it will work and sometimes it won't. According to your original post, the www subdomain is setup with its own CNAME (as opposed to mirroring the main A Record). Because of this, you COULD forward your domain to the www subdomain - ie, forward domain.com to www.domain.com - using GoDaddy.com's domain forwarding functionality.
If, however, the CNAME for a subdomain is set to '#', which means it directs to the main A Record, forwarding the domain to the subdomain would not work.
I just wanted to clarify for anyone else who might come across this thread.
Good luck with your site,
Alon
GoDaddy.com Social Media
Sounds like your DNS/Name Servers on GoDaddy aren't set up right. They should have the information listed for the Nameservers somewhere where you're hosting the site.
EDIT: I've done some more looking around and it would Amazon doesn't provide you the Nameservers for S3. The "real solution" to this would be to set up a CName on GoDaddy. This site provides a lot of insight on doing that: http://www.google.com/support/blogger/bin/answer.py?hl=en&answer=58317
Also, this question seems to have come up before: Using GoDaddy Domain Hosting to link to Amazon S3 Website
I used the approach described in
http://thechrisoshow.com/2011/06/05/how-to-host-a-static-website-on-s3/
(also with godaddy).
It boils down to deleting the A host entry, creating a CNAME entry and using godaddy's forwarding functionality.
For me it is a partial solution. It works if I type
jaumebarcelo.info
in the url bar.
But it does not work if I click on a link pointing to
jaumebarcelo.info
or if I type
wget jaumebarcelo.info from the command line.
I am looking for the same answer. How I have done it in the past is with an apache htaccess rewrite. I may do it again this way.
RewriteCond %{HTTP_HOST} ^mysite\.com
RewriteRule ^(.*)$ http://www.mysite.com/$1 [R=permanent,L]
Here is one such page that talks about it.
If you need more help I would google htaccess and apache rewrites.
If you are using Route 53, you can create a new bucket with your naked domain name, and under 'Static Website Hosting', set it to 'Redirect all requests to another host name'.
Update : Jul 2019
Since the original accepted answer by Michael Krebs in 2012, screens/ui might have changed little bit.
Please follow the screenshots below for the latest steps as of today:
Then click on add.
If no A record and www sub-domain is bound with subdomain it should redirect root domain to www sub-domain. This is how it works with many other sites.