VestaCP vzorové .htaccess a index.php

Úprava souborů pro nově zakládané weby.

Které soubory budeme upravovat?

Je jedno místo, ze kterého se odrazíme. A v něm složky s jasným účelem. Zajímat nás bude index.php a htaccess, které budeme upravovat. Nutno ještě poznamenat, že změnu se projeví až u nově instalovaných webů, které z tohoto vzoru vyjdou.

# vychozi adresar vzorovych souboru
cd /usr/local/vesta/data/templates/web/skel/

Tento adresář mimo obsahuje mimo jiné podadresář /document_errors – ten už ale řešíme v návodu Vlastní chybové stránky ve VestaCP a proto jej budeme ignorovat.

Výchozí bod

Protože jsme trošku líní už dříve jsme propojili VestaCP s vytvořeným FreeNas serverem a nasdíleli si nějaké ty windowsovské složky – více v návodu: Propojení VestaCP a FreeNas (přesuny souborů a skriptů), tak nyní je plán takovýto: Vytvořit vzorové soubory ve sdílené složce, moct je lehce editovat z Win stanice a cronem je jednou denně aktualizovat na server.

Jen připomínám, že už nám z předchozích návodů tři existují adresáře:

  • /d2a-sdilene-skripty – složka na FreeNasu (virtuálního na Proxmoxu) sdílená a propojená na VestaCP
  • /d2a-skripty – lokální složka pro věci, které musí šlapat i když bude nedostupný FreeNas
  • /d2a-zalohy-nas01 – složka FreeNasu (fyzického uložiště) sdílená a propojená na VestaCP

Krok za krokem

Vytvoření adresářů a vykopírování původního obsahu k pozdějším úpravám.

# vytvoreni adresare pro chybove soubory
mkdir -p /d2a-sdilene-skripty/data/vzorove-webove-soubory/

# vykopirovani existujicich chybovek do vytvorene slozky
cp -a /usr/local/vesta/data/templates/web/skel/* /d2a-sdilene-skripty/data/vzorove-webove-soubory/.

# odstraneni chybovych stranek, ktere nechceme do budoucna z tohoto mista synchronizovat (resi jiny skript)
rm -R /d2a-sdilene-skripty/data/vzorove-webove-soubory/document_errors

Vytvoření jednoduchého skriptu pro jednoduché kopírování z FreeNasu na VestaCP.

nano /d2a-sdilene-skripty/vzorove-webove-soubory.bash

Samotný skript.

#!/bin/bash

# vzorove-webove-soubory
#
#   Sublime Text nastaveni
#     Tabsize: 2
#     Viev -> Line endings -> UNIX
#   Nastaveni prav pro spusteni
#     chmod u+x /d2a-sdilene-skripty/vzorove-webove-soubory.bash
#   Pouziti skriptu
#     /d2a-sdilene-skripty/vzorove-webove-soubory.bash

#######################################################################
#
#
# Nastavovaci promenne
#
#
#######################################################################

# vystup - urcuje kam se ma zapisovat prubeh skriptu (kriticke chyby se zapisuji vzdy)
#   na-sklo
#   nikde
vystup="na-sklo"

# odkud kam kopirujeme obsah slozky (zapisuje se vzdy bez lomitka na konci)
# default:
# zdroj="/d2a-sdilene-skripty/data/vzorove-webove-soubory"
# cil="/usr/local/vesta/data/templates/web/skel"
zdroj="/d2a-sdilene-skripty/data/vzorove-webove-soubory"
cil="/usr/local/vesta/data/templates/web/skel"

#######################################################################
#
#
# Staticke promenne - neupravovat
#
#
#######################################################################

# nazev skriptu (udava se bez .bash)
nazev_skriptu="vzorove-webove-soubory"

# systemova nastaveni barev výstupu na sklo
c="\033[31m"
z="\033[32m"
tr="\033[0m"

#######################################################################
#
#
# funkce vypisu na sklo / do logu / oboje
#
#
#######################################################################

function _ {
  cas="$(date '+%H:%M:%S')\t"
  if [ "${vystup}" == "na-sklo" ]; then
    printf "${cas}$* \n";
  fi
}

#######################################################################
#
#
# zahajeni skriptu
#
#
#######################################################################

_ "${z}Spoustim skript ${nazev_skriptu}.bash.${tr}"
_ "$(cp -a "${zdroj}/"* "${cil}/".  2>&1)"

#######################################################################
#
#
# exit
#
#
#######################################################################

_ "${z}Koncim skript${tr}"
exit 0
;;

Nyní je nutné učinit skript spustitelným.

chmod u+x /d2a-sdilene-skripty/vzorove-webove-soubory.bash

Přidání do cronu pro denní aktualizaci.

#zapis do /etc/crontab
echo -e "* 3    * * *   root    /d2a-sdilene-skripty/vzorove-webove-soubory.bash">>/etc/crontab
  
#kontrola a doupraveni (umazani mezer, nahrada tabulatory)
nano /etc/crontab

Napůl hotovo

Tímto je vyřešená denní synchronizace souborů pro vzor vytvářených webů z FreeNas sdílené složky na VestaCP server. Nyní je nutné připravit odpovídající obsah. Ten jde naštěstí snadno upravovat na stanici s Winy v některém pokročilém textovém editoru (Sublime Text).

Adresář /public_html

Zajímají nás tři soubory. I přes nastavení níže by sem žádný dotaz spadnout neměl, vše by mělo být již na proxy směřováno na https (do /shtml).

index.html

Když to dobře půjde, tak se tento index nikdy nezobrazí.

<!DOCTYPE html>
  <html lang="cs-CZ">
    <head>
      <meta charset="UTF-8" />
      <meta name="viewport" content="width=device-width, user-scalable=yes" />
      <title>%domain% — Tento web připravujeme</title>
      <style>
        @import url('https://fonts.googleapis.com/css?family=Ubuntu:300,400,700&amp;display=swap&amp;subset=cyrillic-ext,latin-ext');
        * {
          margin: 0px auto;
          padding: 0px;
          text-align: center;
        }

        body {
          background-color: #D4D9ED;
        }

        .cont_principal {
          position: absolute;  
          width: 100%;
          height: 100%;
          overflow: hidden;
        }

        .cont_error {
          position: absolute;
          width: 100%;
          height: 400px;
          top: calc(50% - 160px);
          margin-top:-150px;
          padding: 20px;
        }

        .cont_error > h1  {
          font-family: 'Ubuntu', sans-serif;  
          font-weight: 700;
          font-size: 150px;
          color: #fff;
          position: relative;
          margin: auto;
          margin-bottom: 20px;
          left: -100%;
          transition: all 0.5s;
          max-width: 90%;
          z-index: 100;
        }

        .cont_error > p {
          font-family: 'Ubuntu', sans-serif;  
          font-weight: 300;
          font-size: 24px;
          letter-spacing: 5px;
          color: #414144;
          position: relative;
          left: 100%;
          max-width: 90%;
          z-index: 100;
        }

        .cont_error > p.r1 {
          transition: all 0.5s;
          transition-delay: 0.5s;
          -webkit-transition: all 0.5s;
          -webkit-transition-delay: 0.5s;
        }

        .cont_error > p.r2 {
          transition: all 0.5s;
          transition-delay: 1.5s;
          -webkit-transition: all 0.5s;
          -webkit-transition-delay: 1.5s;
        }

        .cont_error > p.r3 {
          transition: all 0.5s;
          transition-delay: 2.5s;
          -webkit-transition: all 0.5s;
          -webkit-transition-delay: 2.5s;
        }

        .cont_error > p > a {
          font-family: 'Ubuntu', sans-serif;  
          font-weight: 700;
          font-size: 24px;
          letter-spacing: 5px;
          text-decoration: none;
        }

        a {color: #8A65DF;}
        a:visited {color: #8A65DF;}
        a:active {color: #8A65DF;}
        a:hover {color: #8A65DF;}

        @media (max-width: 900px) {
          body {background: #b8c6ff;}
          .cont_error > h1 {color: #fff;}
          .cont_error > p {color: #000;}
          a {color: #fff;}
          a:visited {color: #fff;}
          a:active {color: #fff;}
          a:hover {color: #fff;}
        }
            
        @media (max-width: 490px) {
          .cont_error > h1 {font-size: 32px; margin-left: 0;}
          .cont_error > p {font-size: 18px;}
          .cont_error > p > a {font-size: 18px;}
          .cont_error > p {display: inline;}
          * {text-align: left;}
        }

        .cont_aura_1 {
          position:absolute;
          width: 300px;
          height: 120%;
          top: 25px;
          right: -340px;
          background-color: #8A65DF;
          box-shadow: 0px 0px  60px  20px  rgba(137,100,222,0.5);
          -webkit-transition: all 0.5s;
          transition: all 0.5s;
        }

        .cont_aura_2 {
          position:absolute;
          width: 100%;
          height: 300px;
          right: -10%;
          bottom: -301px;
          background-color: #8B65E4;
          box-shadow: 0px 0px 60px 10px rgba(131, 95, 214, 0.5),0px 0px  20px  0px  rgba(0,0,0,0.1);
          z-index:5;
          transition: all 0.5s;
          -webkit-transition: all 0.5s;
        }

        .cont_error_active > .cont_error > h1 {
          left: 0%;
        }

        .cont_error_active > .cont_error > p {
          left: 0%;
        }

        .cont_error_active > .cont_aura_2 {
          animation-name: animation_error_2;
          animation-duration: 4s;
          animation-timing-function: linear;
          animation-iteration-count: infinite;
          animation-direction: alternate;
          transform: rotate(-20deg);    
        }

        .cont_error_active > .cont_aura_1 {
          transform: rotate(20deg);
          right: -170px;
          animation-name: animation_error_1;
          animation-duration: 4s;
          animation-timing-function: linear;
          animation-iteration-count: infinite;
          animation-direction: alternate;
        }

        @-webkit-keyframes animation_error_1 {
          from {
            -webkit-transform: rotate(20deg);
            transform: rotate(20deg);
          }
          to {
            -webkit-transform: rotate(25deg);
            transform: rotate(25deg);
          }
        }

        @-o-keyframes animation_error_1 {
          from {
            -webkit-transform: rotate(20deg);
            transform: rotate(20deg);
          }
          to {
            -webkit-transform: rotate(25deg);
            transform: rotate(25deg);
          }
        }

        @-moz-keyframes animation_error_1 {
          from {
            -webkit-transform: rotate(20deg);
            transform: rotate(20deg);
          }
          to {  
            -webkit-transform: rotate(25deg);
            transform: rotate(25deg);
          }
        }

        @keyframes animation_error_1 {
          from {
            -webkit-transform: rotate(20deg);
            transform: rotate(20deg);
          }
          to {  
            -webkit-transform: rotate(25deg);
            transform: rotate(25deg);
          }
        }

        @-webkit-keyframes animation_error_2 {
          from { 
            -webkit-transform: rotate(-15deg); 
            transform: rotate(-15deg);
          }
          to { 
            -webkit-transform: rotate(-20deg);
            transform: rotate(-20deg);
          }
        }

        @-o-keyframes animation_error_2 {
          from {
            -webkit-transform: rotate(-15deg); 
            transform: rotate(-15deg);
          }
          to { 
            -webkit-transform: rotate(-20deg);
            transform: rotate(-20deg);
          }
        }


        @-moz-keyframes animation_error_2 {
          from {
            -webkit-transform: rotate(-15deg); 
            transform: rotate(-15deg);
          }
          to {
            -webkit-transform: rotate(-20deg);
            transform: rotate(-20deg);
          }
        }

        @keyframes animation_error_2 {
          from {
            -webkit-transform: rotate(-15deg); 
            transform: rotate(-15deg);
          }
          to {
            -webkit-transform: rotate(-20deg);
            transform: rotate(-20deg);
          }
        }
      </style>
      <script>
        window.console = window.console || function(t) {};
      </script>
      <script>
        if (document.location.search.match(/type=embed/gi)) {
          window.parent.postMessage("resize", "*");
        }
      </script>
    </head>
    <body translate="no">
      <div class="cont_principal">
        <div class="cont_error">
          <h1>Jejda</h1>
          <p class="r1">Web %domain% ještě nemá žádný obsah.</p>
          <p class="r2">Zkuste se vrátit <a href="javascript:%20history.go(-1)">zpět</a> nebo přijďte později.</p>
          <p> </p>
          <p class="r3">(http verze)</p>
        </div>
        <div class="cont_aura_1"></div>
        <div class="cont_aura_2"></div>
      </div>
      <script id="rendered-js">
        window.onload = function () {
          document.querySelector('.cont_principal').className = "cont_principal cont_error_active";
        };
      </script>
    </body>
  </html>

robots.txt

User-agent: *
Crawl-delay: 10

.htaccess

# presmerovani http na https
# <IfModule mod_rewrite.c>
#   RewriteEngine on
#   RewriteCond %{HTTPS} !=on [NC]
#   RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L,QSA,NE]
# </IfModule>

Adresář /public_shtml

index.html

<!DOCTYPE html>
  <html lang="cs-CZ">
    <head>
      <meta charset="UTF-8" />
      <meta name="viewport" content="width=device-width, user-scalable=yes" />
      <title>%domain% — Tento web připravujeme</title>
      <style>
        @import url('https://fonts.googleapis.com/css?family=Ubuntu:300,400,700&amp;display=swap&amp;subset=cyrillic-ext,latin-ext');
        * {
          margin: 0px auto;
          padding: 0px;
          text-align: center;
        }

        body {
          background-color: #D4D9ED;
        }

        .cont_principal {
          position: absolute;  
          width: 100%;
          height: 100%;
          overflow: hidden;
        }

        .cont_error {
          position: absolute;
          width: 100%;
          height: 400px;
          top: calc(50% - 160px);
          margin-top:-150px;
          padding: 20px;
        }

        .cont_error > h1  {
          font-family: 'Ubuntu', sans-serif;  
          font-weight: 700;
          font-size: 150px;
          color: #fff;
          position: relative;
          margin: auto;
          margin-bottom: 20px;
          left: -100%;
          transition: all 0.5s;
          max-width: 90%;
          z-index: 100;
        }

        .cont_error > p {
          font-family: 'Ubuntu', sans-serif;  
          font-weight: 300;
          font-size: 24px;
          letter-spacing: 5px;
          color: #414144;
          position: relative;
          left: 100%;
          max-width: 90%;
          z-index: 100;
        }

        .cont_error > p.r1 {
          transition: all 0.5s;
          transition-delay: 0.5s;
          -webkit-transition: all 0.5s;
          -webkit-transition-delay: 0.5s;
        }

        .cont_error > p.r2 {
          transition: all 0.5s;
          transition-delay: 1.5s;
          -webkit-transition: all 0.5s;
          -webkit-transition-delay: 1.5s;
        }

        .cont_error > p.r3 {
          transition: all 0.5s;
          transition-delay: 2.5s;
          -webkit-transition: all 0.5s;
          -webkit-transition-delay: 2.5s;
        }

        .cont_error > p > a {
          font-family: 'Ubuntu', sans-serif;  
          font-weight: 700;
          font-size: 24px;
          letter-spacing: 5px;
          text-decoration: none;
        }

        a {color: #8A65DF;}
        a:visited {color: #8A65DF;}
        a:active {color: #8A65DF;}
        a:hover {color: #8A65DF;}

        @media (max-width: 900px) {
          body {background: #b8c6ff;}
          .cont_error > h1 {color: #fff;}
          .cont_error > p {color: #000;}
          a {color: #fff;}
          a:visited {color: #fff;}
          a:active {color: #fff;}
          a:hover {color: #fff;}
        }
            
        @media (max-width: 490px) {
          .cont_error > h1 {font-size: 32px; margin-left: 0;}
          .cont_error > p {font-size: 18px;}
          .cont_error > p > a {font-size: 18px;}
          .cont_error > p {display: inline;}
          * {text-align: left;}
        }

        .cont_aura_1 {
          position:absolute;
          width: 300px;
          height: 120%;
          top: 25px;
          right: -340px;
          background-color: #8A65DF;
          box-shadow: 0px 0px  60px  20px  rgba(137,100,222,0.5);
          -webkit-transition: all 0.5s;
          transition: all 0.5s;
        }

        .cont_aura_2 {
          position:absolute;
          width: 100%;
          height: 300px;
          right: -10%;
          bottom: -301px;
          background-color: #8B65E4;
          box-shadow: 0px 0px 60px 10px rgba(131, 95, 214, 0.5),0px 0px  20px  0px  rgba(0,0,0,0.1);
          z-index:5;
          transition: all 0.5s;
          -webkit-transition: all 0.5s;
        }

        .cont_error_active > .cont_error > h1 {
          left: 0%;
        }

        .cont_error_active > .cont_error > p {
          left: 0%;
        }

        .cont_error_active > .cont_aura_2 {
          animation-name: animation_error_2;
          animation-duration: 4s;
          animation-timing-function: linear;
          animation-iteration-count: infinite;
          animation-direction: alternate;
          transform: rotate(-20deg);    
        }

        .cont_error_active > .cont_aura_1 {
          transform: rotate(20deg);
          right: -170px;
          animation-name: animation_error_1;
          animation-duration: 4s;
          animation-timing-function: linear;
          animation-iteration-count: infinite;
          animation-direction: alternate;
        }

        @-webkit-keyframes animation_error_1 {
          from {
            -webkit-transform: rotate(20deg);
            transform: rotate(20deg);
          }
          to {
            -webkit-transform: rotate(25deg);
            transform: rotate(25deg);
          }
        }

        @-o-keyframes animation_error_1 {
          from {
            -webkit-transform: rotate(20deg);
            transform: rotate(20deg);
          }
          to {
            -webkit-transform: rotate(25deg);
            transform: rotate(25deg);
          }
        }

        @-moz-keyframes animation_error_1 {
          from {
            -webkit-transform: rotate(20deg);
            transform: rotate(20deg);
          }
          to {  
            -webkit-transform: rotate(25deg);
            transform: rotate(25deg);
          }
        }

        @keyframes animation_error_1 {
          from {
            -webkit-transform: rotate(20deg);
            transform: rotate(20deg);
          }
          to {  
            -webkit-transform: rotate(25deg);
            transform: rotate(25deg);
          }
        }

        @-webkit-keyframes animation_error_2 {
          from { 
            -webkit-transform: rotate(-15deg); 
            transform: rotate(-15deg);
          }
          to { 
            -webkit-transform: rotate(-20deg);
            transform: rotate(-20deg);
          }
        }

        @-o-keyframes animation_error_2 {
          from {
            -webkit-transform: rotate(-15deg); 
            transform: rotate(-15deg);
          }
          to { 
            -webkit-transform: rotate(-20deg);
            transform: rotate(-20deg);
          }
        }


        @-moz-keyframes animation_error_2 {
          from {
            -webkit-transform: rotate(-15deg); 
            transform: rotate(-15deg);
          }
          to {
            -webkit-transform: rotate(-20deg);
            transform: rotate(-20deg);
          }
        }

        @keyframes animation_error_2 {
          from {
            -webkit-transform: rotate(-15deg); 
            transform: rotate(-15deg);
          }
          to {
            -webkit-transform: rotate(-20deg);
            transform: rotate(-20deg);
          }
        }
      </style>
      <script>
        window.console = window.console || function(t) {};
      </script>
      <script>
        if (document.location.search.match(/type=embed/gi)) {
          window.parent.postMessage("resize", "*");
        }
      </script>
    </head>
    <body translate="no">
      <div class="cont_principal">
        <div class="cont_error">
          <h1>Jejda</h1>
          <p class="r1">Web %domain% ještě nemá žádný obsah.</p>
          <p class="r2">Zkuste se vrátit <a href="javascript:%20history.go(-1)">zpět</a> nebo přijďte později.</p>
          <p> </p>
          <p class="r3">(https verze)</p>
        </div>
        <div class="cont_aura_1"></div>
        <div class="cont_aura_2"></div>
      </div>
      <script id="rendered-js">
        window.onload = function () {
          document.querySelector('.cont_principal').className = "cont_principal cont_error_active";
        };
      </script>
    </body>
  </html>

robots.txt

User-agent: *
Crawl-delay: 10

.htaccess

# tento soubor je prazdny

Hotovo

Teď už jen založit nový web a vyzkoušet nastavené.

Martin Horák

Martin Horák má na svědomí 29 příspěvků

Již nějakou chvíli se věnuji tvorbě webů, copywritingu a všem těm drobným a nepodstatným věcem okolo toho.

Najmout si mě můžete přes horní lištu a klikátko kontakty.

Diskuze

Vaše emailová adresa nebude publikována. Povinné údaje jsou označeny *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>