diff --git a/lib/site-ssl b/lib/site-ssl index c4d8f6e..a0c936c 100644 --- a/lib/site-ssl +++ b/lib/site-ssl @@ -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}" diff --git a/lib/sites b/lib/sites index 47abcbe..9f6e67f 100644 --- a/lib/sites +++ b/lib/sites @@ -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 + +} + diff --git a/plugins/site b/plugins/site index dbba6f0..b53633e 100644 --- a/plugins/site +++ b/plugins/site @@ -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}" diff --git a/templates/template-site-wwwredirect b/templates/template-site-wwwredirect new file mode 100644 index 0000000..f9ada7c --- /dev/null +++ b/templates/template-site-wwwredirect @@ -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 diff --git a/weby b/weby index a74f1bd..5b09ae0 100644 --- a/weby +++ b/weby @@ -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