force www redirect

Now we have a command to force redirections to www or non-www.
This commit is contained in:
Cristhian Martínez Ochoa 2018-05-02 15:41:31 -06:00
parent 31bb518b4e
commit b26f7ec9b6
5 changed files with 88 additions and 9 deletions

View file

@ -67,12 +67,13 @@ site_ssl_on() {
if [[ -a /etc/letsencrypt/live/$root/fullchain.pem ]]; then
sudo sed -i '/listen 80/c \ listen 443 ssl http2;' /etc/nginx/sites-available/$domain
sudo sed -i '/listen \[::\]:80/c \ listen [::]:443 ssl http2;' /etc/nginx/sites-available/$domain
sudo sed -i '/headers-html.conf/a \ include common/headers-https.conf;' /etc/nginx/sites-available/$domain
sudo sed -i '/headers-http.conf/a \ include common/headers-https.conf;' /etc/nginx/sites-available/$domain
sudo sed -i '/server_name /r /opt/webinoly/templates/template-site-ssl' /etc/nginx/sites-available/$domain
sudo sed -i "/WebinolySSLstart/,/WebinolySSLend/{s/domain.com/$domain/}" /etc/nginx/sites-available/$domain
# HTTP to HTTPS Redirection
local sername=$(grep -w "server_name .*;" /etc/nginx/sites-available/$domain)
local sername="server_name $domain www.$domain;"
[[ $subdomflag == 1 ]] && sername="server_name $domain;"
sudo sed -i '1r /opt/webinoly/templates/template-site-sslredirect' /etc/nginx/sites-available/$domain
sudo sed -i "/#server_name;/c \ $sername" /etc/nginx/sites-available/$domain
@ -107,7 +108,7 @@ site_ssl_off() {
answer=="N"
else
echo "${blu}"
echo " Do you want to delete your certificate files [y/N]? "
echo "Do you want to delete your certificate files [y/N]? "
while read -r -n 1 -s answer; do
answer=${answer:-n}
[[ $answer = [YyNn] ]] && break
@ -120,7 +121,7 @@ site_ssl_off() {
rm -rf /etc/letsencrypt/renewal/${domain}.conf
rm -rf /etc/letsencrypt/archive/${domain}
echo "${gre}"
echo " Certificate for your site $domain has been completely removed!"
echo "Certificate for your site $domain has been completely removed!"
echo "${end}"
fi
echo "${gre}SSL have been successfully disabled for site $domain!${end}"

View file

@ -525,3 +525,65 @@ createsite() {
echo "${gre}Site $domain has been successfully created!${end}"
}
force_redirect() {
if ! [[ $value =~ ^(www|root|off)$ ]]; then
echo "${red}Please, enter a valid argument!${end}"
exit 1
fi
if [[ $subdomflag == 1 ]]; then
echo "${red}Please, use the main/root domain, Force-Redirection should not be used in Subdomains!${end}"
exit 1
fi
local rediron=$( grep -F "WebinolyWWWredirectStart" /etc/nginx/sites-available/$domain )
local sername="server_name $domain www.$domain"
cp /opt/webinoly/templates/template-site-wwwredirect /tmp/template-site-wwwredirect
case $value in
"www")
[[ -n $rediron ]] && sudo sed -i '/WebinolyWWWredirectStart/,/WebinolyWWWredirectEnd/{/.*/d}' /etc/nginx/sites-available/$domain
sudo sed -i "/#server_name;/c \ server_name $domain;" /tmp/template-site-wwwredirect
sudo sed -i "/#return 301;/c \ return 301 \$scheme://www.${domain}\$request_uri;" /tmp/template-site-wwwredirect
sudo sed -i "/server_name /c \ server_name www.$domain;" /etc/nginx/sites-available/$domain
echo "${gre}Force-Redirection to WWW has been successfully enabled!${end}"
;;
"root")
[[ -n $rediron ]] && sudo sed -i '/WebinolyWWWredirectStart/,/WebinolyWWWredirectEnd/{/.*/d}' /etc/nginx/sites-available/$domain
sudo sed -i "/#server_name;/c \ server_name www.$domain;" /tmp/template-site-wwwredirect
sudo sed -i "/#return 301;/c \ return 301 \$scheme://${domain}\$request_uri;" /tmp/template-site-wwwredirect
sudo sed -i "/server_name /c \ server_name $domain;" /etc/nginx/sites-available/$domain
echo "${gre}Force-Redirection to non-WWW has been successfully enabled!${end}"
;;
"off")
if [[ -n $rediron ]]; then
sudo sed -i '/WebinolyWWWredirectStart/,/WebinolyWWWredirectEnd/{/.*/d}' /etc/nginx/sites-available/$domain
sudo sed -i "/server_name /c \ $sername;" /etc/nginx/sites-available/$domain
echo "${gre}Force-Redirection has been successfully disabled!${end}"
else
echo "${red}Force-Redirect is already disabled for site $domain!${end}"
fi
;;
esac
# If SSL is enabled insert after that - First redirect should be to HTTPS due to HSTS.
isssl=$( grep -F "ssl on;" /etc/nginx/sites-available/$domain )
if [[ -z $isssl && $value =~ ^(www|root)$ ]]; then
sudo sed -i '1r /tmp/template-site-wwwredirect' /etc/nginx/sites-available/$domain
elif [[ -n $isssl && $value =~ ^(www|root)$ ]]; then
sudo sed -i '/listen 80/c \ listen 443 ssl http2;' /tmp/template-site-wwwredirect
sudo sed -i '/listen \[::\]:80/c \ listen [::]:443 ssl http2;' /tmp/template-site-wwwredirect
sudo sed -i '/headers-http.conf/a \ include common/headers-https.conf;' /tmp/template-site-wwwredirect
sudo sed -i '/server_name /r /opt/webinoly/templates/template-site-ssl' /tmp/template-site-wwwredirect
sudo sed -i "/WebinolySSLstart/,/WebinolySSLend/{s/domain.com/$domain/}" /tmp/template-site-wwwredirect
sudo sed -i "/WebinolySSLredirectStart/,/WebinolySSLredirectEnd/s/\(server_name\).*$/$sername/" /etc/nginx/sites-available/$domain
sudo sed -i '/WebinolySSLredirectEnd/r /tmp/template-site-wwwredirect' /etc/nginx/sites-available/$domain
fi
sudo rm /tmp/template-site-wwwredirect
}

View file

@ -35,7 +35,7 @@ if [[ $domain == "-mysql="* ]]; then
value=$(echo "${domain}" | cut -d'=' -f 2 -s)
domain=$(echo "${domain}" | cut -d'=' -f 1 -s)
fi
if [[ $type == "-parked="* || $type == "-proxy="* || $type == "-wp="* || $type == "-wpsubdir="* || $type == "-wpsubdom="* || $type == "-ssl-off="* || $type == "-mysql="* || $type == "-delete="* ]]; then
if [[ $type == "-parked="* || $type == "-proxy="* || $type == "-wp="* || $type == "-wpsubdir="* || $type == "-wpsubdom="* || $type == "-ssl-off="* || $type == "-mysql="* || $type == "-delete="* || $type == "-force-redirect="* ]]; then
value=$(echo "${type}" | cut -d'=' -f 2 -s)
type=$(echo "${type}" | cut -d'=' -f 1 -s)
fi
@ -46,7 +46,7 @@ fi
# Check if site is sub-domain
if [[ -n $domain && $type =~ ^(-html|-php|-mysql|-wp|-wpsubdir|-wpsubdom|-parked|-proxy|-ssl-on)$ ]]; then
if [[ -n $domain && $type =~ ^(-html|-php|-mysql|-wp|-wpsubdir|-wpsubdom|-parked|-proxy|-ssl-on|-force-redirect)$ ]]; then
count=1
while true; do
tld=$(echo "${domain}" | rev | cut -d'.' -f -$count -s | rev)
@ -339,10 +339,15 @@ elif [[ "$type" == "-cache" && -a /etc/nginx/sites-available/$domain ]]; then
else
echo "${red} Site $domain is not a WP site or FastCGI is already enabled!${end}"
fi
# Force www or non-www redirect (www, root, off)
elif [[ "$type" == "-force-redirect" && -a /etc/nginx/sites-available/$domain ]]; then
force_redirect
# Catch ERROR
elif [[ ! -a /etc/nginx/sites-available/$domain && $type =~ ^(-nocache|-cache|-delete|-off|-on|-ssl-on|-ssl-off)$ ]]; then
elif [[ ! -a /etc/nginx/sites-available/$domain && $type =~ ^(-nocache|-cache|-delete|-off|-on|-ssl-on|-ssl-off|-force-redirect)$ ]]; then
echo "${red}Site $domain doesn't exists!${end}"
else
echo "${red} Argument '${type}' is not a valid option! ${end}"

View file

@ -0,0 +1,10 @@
# WebinolyWWWredirectStart - Force WWW or non-WWW redirect
server {
listen 80;
listen [::]:80;
#server_name;
include common/headers-http.conf;
#return 301;
}
# WebinolyWWWredirectEnd

5
weby
View file

@ -1,7 +1,7 @@
#!/bin/bash
# Webinoly Installation Script.
webyversion="1.4.1"
webyversion="1.5.0-beta"
# Check OS support
@ -49,11 +49,12 @@ if [[ $2 == "-ver="* ]]; then
sudo wget --timeout=15 -qrO $HOME/webinoly.tar https://qrok.es/webinoly?version=$ver
sudo rm webinoly?version=$ver
webyversion="$ver"
[[ $ver == "beta" ]] && echo "[WARNING] You are installing a BETA version of Webinoly and it's not recommended for production enviroments. $(tput sgr0)"
[[ $ver == "beta" ]] && echo "[WARNING] You are installing a BETA version of Webinoly and it's not recommended for production enviroments."
else
echo "[ERROR] Version not found or not available! ($code) $(tput sgr0)"
exit 1
fi
echo $(tput sgr0)
else
sudo wget --timeout=15 -qrO $HOME/webinoly.tar https://qrok.es/wytar
fi