I am using curl
to verify redirects and display real destination URL and you should try it too.
Command-line
The simplest way to display real destination URL is to use quiet mode, discard output, follow redirects and display the URL that was fetched in the last transfer after executing GET
method.
$ curl --silent --location --output /dev/null --write-out "%{url_effective}\n" http://sleeplessbeastie.eu
https://sleeplessbeastie.eu/
This solution can be extended to fetch only headers instead of the whole document.
$ curl --head --silent --location --output /dev/null --write-out "%{url_effective}\n" http://sleeplessbeastie.eu
https://sleeplessbeastie.eu/
You can be more verbose and display number of performed redirects.
$ curl --head --silent --location --output /dev/null --write-out "It took %{num_redirects} redirect/redirects to get %{url_effective}\n" http://sleeplessbeastie.eu
It took 1 redirect/redirects to get https://sleeplessbeastie.eu/
Shell script
Use the following shell script to iterate over every redirection and display it in human readable form.
#!/bin/bash # Display redirects performed for given URL if [ "$#" != "1" ]; then echo "Display redirects performed for given URL" echo "URL is missing" exit fi # URL from/to curl_url_from="" curl_url_to="$1" # number of performed redirects curl_num_redirects="0" # use head instead of get? curl_use_head=0 # define head or get method if [ "$curl_use_head" -eq "1" ]; then curl_param_head="--head" else curl_param_head="" fi # main loop while true; do # execute curl to get from/to URL curl_output="$(curl $curl_param_head --silent --output /dev/null --write-out " %{url_effective} %{redirect_url}\n" $curl_url_to)" # calculate number of received parameters curl_output_n="$(echo $curl_output | awk '{print NF}')" if [ "$curl_output_n" -eq "2" ]; then # number of received parameters is equal to 2 # it means that there was redirection # set from/to URL curl_url_from="$(echo $curl_output | awk '{print $1}')" curl_url_to="$(echo $curl_output | awk '{print $2}')" # get http code curl_http_code="$(curl $curl_param_head --silent --output /dev/null --write-out "%{http_code}\n" $curl_url_to)" echo "${curl_url_from} -> ${curl_url_to} (${curl_http_code})" # increase number of redirects curl_num_redirects=$(expr $curl_num_redirects \+ 1) else # number of received parameters is equal to 1 # it means that there was no redirection if [ "$curl_num_redirects" -gt "0" ]; then echo fi echo "Number of performed redirects: $curl_num_redirects" break fi done
Shell script - examples
Standard http to https redirect:
$ bash display_redirects.sh http://sleeplessbeastie.eu
http://sleeplessbeastie.eu/ -> https://sleeplessbeastie.eu/ (200) Number of performed redirects: 1
No redirect:
$ bash display_redirects.sh https://sleeplessbeastie.eu
Number of performed redirects: 0
Standard http to https redirect with 404 http code:
$ bash display_redirects.sh http://sleeplessbeastie.eu/non-existent
http://sleeplessbeastie.eu/non-existent -> https://sleeplessbeastie.eu/non-existent (404) Number of performed redirects: 1
Multiple redirects:
$ bash display_redirects.sh http://clickmeeting.com
http://clickmeeting.com/ -> http://clickmeeting.com/pl (301) http://clickmeeting.com/pl -> https://clickmeeting.com/pl (200) Number of performed redirects: 2