Jak nasměrovat web do jiné složky a změnit webroot

DocumentRoot je nastavení (direktiva), které webserveru říká, ze které složky má web zobrazovat; v Nginx se stejná direktiva jmenuje root a celé této složce kam direktivy ukazují se říká webroot. Ve výchozím nastavení je to hlavní složka vašeho webového prostoru (u Váš Hosting složka www) – když někdo otevře vaši doménu, načte se z ní soubor index.php nebo index.html. V článku ukážeme obě varianty. Změnit ji znamená nasměrovat web na jinou složku – nejčastěji na podsložku, kde má framework svůj veřejný vstupní bod.

Řada moderních frameworků – třeba Symfony, Laravel nebo Nette – očekává, že web poběží z podsložky, ne z hlavní složky webu. Typicky jde o složku public (u Laravelu a Symfony) nebo www (u Nette), ve které leží jediný veřejně přístupný vstupní soubor, zatímco zbytek aplikace zůstává o úroveň výš, mimo dosah z webu. Právě kvůli tomuto oddělení frameworky takové uspořádání doporučují – jde hlavně o bezpečnost.

Stejná potřeba ale nastane i v jednodušších případech: chcete web zobrazovat z jiné složky, než je výchozí, nebo mít v jednom webovém prostoru víc oddělených částí.

V tomto návodu vás provedeme dvěma způsoby, jak web do jiné složky nasměrovat – přes soubor .htaccess (funguje i na webhostingu) a trvalým přes úpravu konfigurace webserveru (dostupné pouze na VPS). Ukážeme si oba postupy pro webhosting i pro obě verze VPS Centra a vysvětlíme, čím se od sebe liší a kdy který zvolit.

Rychlý přehled pro pokročilé

Tato část slouží pouze pro ověření pro velmi zkušené uživatele, kteří si chtějí pouze ověřit postup a nepotřebují číst celý článek. Pro všechny ostatní doporučujeme pokračovat další sekcí.

  • Webhosting: Do webrootu vložte soubor .htaccess s rewrite pravidlem, které požadavky přesměruje do podsložky. Cílová podsložka musí existovat a obsahovat vstupní soubor index.php aplikace.
  • VPS Centrum V3: Detail domény → Přehled → sekce Webserver → nabídka se třemi tečkami (⋯) → Upravit Apache konfiguraci → změňte DocumentRoot (je ve dvou blocích – pro port 80 i 443). V režimech Apache – Performance a Apache – Super cache změňte navíc root přes Upravit Nginx konfiguraci. Na čistém Nginx měňte jen root.
  • VPS Centrum V2: pravý panel → Nastavení → sekce Nastavení webserveru → tab aktivního webserveru (Apache – Aktivní nebo Nginx) → změňte DocumentRoot (u Apache ve dvou blocích – port 80 i 443) nebo root (u Nginx).
  • Kompletní přehled dalších rewrite pravidel: Nejčastější příklady .htaccess.

Co je dobré vědět předem

Postupy v tomto článku vedou ke dvěma různým výsledkům, a proto je dobré vědět, čím se liší. Úpravou konfigurace webserveru skutečně přesunete webroot – nadřazená složka i s kódem aplikace se stane z webu nedostupnou, což je právě to bezpečnostní oddělení, kvůli kterému frameworky zanoření doporučují.

Tato cesta je ale dostupná jen na VPS. Na webhostingu konfiguraci webserveru upravovat nelze, takže tam zbývá .htaccess – ten požadavky do podsložky přesměruje, ale webrootem zůstává nadřazená složka. Je to tedy spíš směrování než skutečné přesunutí: kód aplikace zůstává fyzicky uvnitř webrootu a před přístupem z webu ho chrání jen samotné přesměrovací pravidlo, kdežto úprava konfigurace webroot přesune mimo dosah webserveru úplně. Co to znamená pro bezpečnost, rozebíráme u postupu na webhostingu.

Co budete potřebovat

  • Přístup k souborům webupovinné. Buď přes Správce souborů v rozhraní, nebo přes FTP klienta (například FileZilla); na VPS lze i přes SFTP. Sem nahrajete aplikaci a vytvoříte nebo upravíte .htaccess na webhostingu.
  • Znalost cílové podsložkypovinné. Musíte vědět, kterou podsložku má web používat (u Nette www, u Laravelu a Symfony public) a mít v ní vstupní soubor aplikace.
  • VPS a přístup do VPS Centrapodmíněné. Jen pokud chcete webroot změnit trvale přes konfiguraci webserveru. Na webhostingu tato cesta dostupná není.

Tip: Název veřejné podsložky najdete v dokumentaci svého frameworku. Nejčastěji je to public (Laravel, Symfony) nebo www (Nette). Pokud si nejste jisti, hledejte složku, ve které leží soubor index.php s pár řádky, jež načítají zbytek aplikace.

Časový odhad

Vložení nebo úprava .htaccess i změna webrootu v konfiguraci webserveru zaberou řádově pár minut. Počítejte s tím, že se změna projeví až po uložení, kdy webserver načte novou konfiguraci.

Jak zjistíte, jakou verzi VPS Centra máte

Verzi poznáte podle vzhledu rozhraní.

VPS Centrum V3 má svislé menu vlevo (Domény, Databáze, Zabezpečení a další) a číslo verze vpravo dole.

VPS Centrum V2 má vodorovné menu nahoře (Domény, Správa serveru, Přehledy a další) a číslo verze v patičce. Navigace i rozložení se mezi verzemi liší, proto postupujte podle té své.

Skok rovnou k postupu

Návod dál pokrývá jednotlivé cesty v samostatných sekcích – přejděte rovnou k té, kterou používáte:

Přesměrování přes .htaccess na webhostingu

Trvalá změna ve VPS Centru V3

Trvalá změna ve VPS Centru V2

Přesměrování přes .htaccess na webhostingu

Na webhostingu je přesměrování přes .htaccess jediná cesta, jak web spustit z podsložky – konfiguraci webserveru tam upravovat nelze. Volíte ji, když je vaše aplikace postavená tak, aby běžela z podsložky (typicky framework s veřejnou složkou public). Do webrootu vložíte soubor .htaccess s pravidlem, které požadavky přesměruje do zvolené podsložky; skutečný webroot se tím nemění (zůstává jím nadřazená složka) – na webhostingu tedy jde čistě o architekturu webu, ne o přesun webrootu. Návštěvník uvidí obsah z podsložky.

Na VPS .htaccess v režimech s Apache funguje také, ale oproti přepnutí webrootu přímo v konfiguraci je to delší a komplikovanější řešení – máte-li VPS, doporučujeme úpravu konfigurace webserveru. Na čistém Nginx .htaccess nefunguje vůbec.

K souborům se dostanete přes Správce souborů (Zákaznický portál → DoményVyberte doménuSprávce souborů) nebo přes FTP klienta (například FileZilla). Správce souborů se otevře v Kořenovém adresáři (domovská složka účtu); webroot je až složka www uvnitř.

Správce souborů otevřený v kořenovém adresáři účtu s viditelnou složkou www

Vstupte do složky www (to je webroot) a vytvořte v ní soubor .htaccess (pokud už existuje, otevřete ho k úpravě). Vložte do něj tento zápis:

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/public/
RewriteRule ^(.*)$ public/$1 [L]

Složku public v obou řádcích nahraďte tou, kterou váš web používá (u Nette je to www). Zápis říká webserveru: každý požadavek, který nemíří přímo do složky public, obsluž ze složky public – tedy najdi odpovídající soubor uvnitř ní. Po uložení souboru se web začne načítat z podsložky.

Pozor: Cílová podsložka musí existovat a musí v ní být vstupní soubor index.php aplikace. Pokud složka neexistuje nebo je prázdná, začne web po vložení pravidla vracet chybu 404. Tento postup zároveň nepoužívejte na běžný web na WordPressu – ten běží přímo z webrootu, ne z podsložky, a přesměrování by ho rozbilo.

Bezpečnost na webhostingu: Přesměrování má i bezpečnostní přínos, byť menší než skutečný přesun webrootu na VPS. Pravidlo posílá každý požadavek do podsložky public, takže požadavky na soubory aplikace mimo ni (.env, konfigurace, zdrojový kód) skončí chybou 404 a z webu je nikdo nestáhne – a to i tehdy, když útočník jejich umístění zná. Ochrana tedy nestojí na utajení názvů, ale na tom, že se na soubory mimo public vůbec nedá dosáhnout. Kód ale fyzicky zůstává uvnitř webrootu a chrání ho jen toto pravidlo: kdyby přestalo platit (třeba po chybné úpravě .htaccess), soubory by se odkryly. Skutečné, strukturální oddělení, kdy kód leží mimo dosah webserveru, získáte až přesunem webrootu v konfiguraci na VPS.

Pro lepší představu – celý framework leží ve www, ale veřejná je jen složka public:

www/                  ← webroot (docroot)
├── app/              ← kód aplikace (skrytý)
├── config/           ← konfigurace (skrytá)
├── vendor/           ← závislosti (skryté)
├── .env              ← citlivé údaje (skryté)
├── .htaccess         ← pravidlo přesměrování do public/
└── public/           ← jediná veřejná složka
    ├── index.php     ← vstupní bod webu
    ├── styl.css
    └── obrázek.png

Trvalá změna webrootu úpravou konfigurace webserveru

Úpravou konfigurace webserveru skutečně přesunete webroot do zvolené podsložky – všechno nad ní pak přestane být z webu dostupné. To je kompletní řešení a zároveň bezpečnostní oddělení, kvůli kterému frameworky zanoření doporučují.

Tato cesta je dostupná pouze na VPS. Na webhostingu konfiguraci webserveru upravovat nelze (běží na sdíleném serveru) – tam použijte přesměrování přes .htaccess. Pokud potřebujete skutečné přesunutí webrootu i plné oddělení kódu, zvažte přechod na VPS.

Ve VPS Centru se konfigurace webserveru upravuje přímo v rozhraní. Který soubor upravit, závisí na tom, jaký webserver na doméně běží – proto se postup pro V3 a V2 liší.

VPS Centrum V3

Ve VPS Centru V3 má každá doména jeden ze čtyř režimů webserveru a podle něj se liší, kterou konfiguraci upravit. Než začnete, zjistěte si svůj režim: otevřete Detail domény → Přehled → sekci Webserver, kde je u režimu štítek (například Apache – Performance). Ze stejné sekce konfiguraci i upravíte – přes nabídku se třemi tečkami (⋯) vedle tlačítka Nastavení.

Sekce Webserver v detailu domény ve VPS Centru V3 se štítkem režimu a otevřenou nabídkou pro úpravu konfigurace webserveru.

Podle režimu pak postupujte takto.

Čistý Apache – z nabídky (⋯) zvolte Upravit Apache konfiguraci, najděte řádek DocumentRoot a nasměrujte ho do podsložky. Je ve dvou blocích – pro nešifrovaný port 80 (<VirtualHost *:80>) a šifrovaný port 443 (<VirtualHost *:443>) – upravte ho v obou na cestu k vámi vytvořené složce:

DocumentRoot /www/hosting/vasedomena.cz/www/public

Čistý Nginx – z nabídky (⋯) zvolte Upravit Nginx konfiguraci, najděte řádek root a nasměrujte ho do podsložky kterou jste vytvořili:

root /www/hosting/vasedomena.cz/www/public;

Apache – Performance nebo Apache – Super cache – upravte obojí: DocumentRoot v Apache konfiguraci (v obou blocích, stejně jako u čistého Apache) a zároveň root v Nginx konfiguraci (stejně jako u čistého Nginx). V těchto kombinovaných režimech totiž statické soubory (obrázky, styly) obsluhuje Nginx z vlastní složky. Kdybyste změnili jen Apache, web by fungoval, ale statiku by obsloužil Apache bez dlouhé cache – prohlížeč by si ji neukládal a načítala by se pomaleji.

Cestu vždy upravte podle své domény a cílové podsložky – výchozí míří do složky www, tady ji směřujeme do její podsložky public. Po uložení se webserver znovu načte a web běží z nové složky.

VPS Centrum V2

Ve VPS Centru V2 běží na doméně vždy jen jeden webserver – buď Apache, nebo Nginx (přepíná se serverově v Správa serveruWeb & FTP) – a upravujete jen konfiguraci toho aktivního. Než začnete, zjistěte si, který to je: v pravém panelu vyberte doménu → Nastavení → sekci Nastavení webserveru (o něco níže). Aktivní webserver poznáte podle tabu označeného Aktivní (například Apache – Aktivní); na stejném místě konfiguraci i upravíte.

Nastavení webserveru ve VPS Centru V2 s taby webserverů a editorem konfigurace.

Podle aktivního webserveru pak postupujte takto.

Aktivní Apache – najděte řádek DocumentRoot a nasměrujte ho do vámi vytvořené podsložky. Je ve dvou blocích – pro nešifrovaný port 80 (<VirtualHost *:80>) a šifrovaný port 443 (<VirtualHost *:443>) – upravte ho v obou:

DocumentRoot /www/hosting/vasedomena.cz/www/public

Aktivní Nginx – najděte řádek root (je jen v jednom bloku) a nasměrujte ho do stejné vámi zvolené podsložky:

root /www/hosting/vasedomena.cz/www/public;

Cestu upravte podle své domény a cílové podsložky. Po úpravě klikněte na Uložit – webserver se znovu načte a web začne běžet z nové složky.

Pozor: Needitujte Šablony konfiguračních souborů pro nové domény na stránce Web & FTP – ty se použijí jen na nově zakládané domény, ne na už existující. Webroot existující domény měňte výhradně v jejím Nastavení webserveru.

Řešení problémů

Po změně vidíme místo webu chybu 404

Symptom: Změnili jsme webroot (nebo vložili .htaccess) a místo webu se načítá chyba 404.

Příčina: Cílová podsložka neexistuje, je prázdná, nebo v ní chybí vstupní soubor index.php aplikace. Webserver míří do složky, ve které nic nenajde.

Řešení: Zkontrolujte, že podsložka na disku skutečně existuje a že je v ní vstupní soubor aplikace. Ověřte také její přesný název – musí se shodovat s tím, co jste zadali do cesty (velká a malá písmena hrají roli). U varianty s .htaccess se ujistěte, že název složky v pravidle odpovídá reálné složce.

Po vložení .htaccess web hlásí chybu 500

Symptom: Vložili jsme .htaccess do webrootu a web se přestal načítat – hlásí chybu 500.

Příčina: Soubor obsahuje direktivu, kterou webserver na hostingu neumí zpracovat – typicky php_value nebo php_flag. PHP na Váš Hosting běží přes PHP-FPM, takže tyto direktivy v .htaccess vyvolají chybu.

Řešení: Odeberte z .htaccess řádky začínající php_value a php_flag – samotné rewrite pravidlo pro přesměrování do podsložky je v pořádku a chybu nezpůsobuje. Hodnoty PHP konfigurace nastavíte jinak: na webhostingu přes podporu, na VPS ve VPS Centru (viz Jak upravit hodnoty PHP konfigurace pro doménu).

Statické soubory se po přesunu načítají pomalu nebo bez cache

Symptom: Ve VPS Centru V3 (režim Apache – Performance nebo Apache – Super cache) jsme změnili webroot v konfiguraci Apache, web funguje, ale obrázky, styly a skripty se načítají pomalu a prohlížeč si je neukládá do cache.

Příčina: V těchto kombinovaných režimech obsluhuje statické soubory přednostně Nginx z vlastní složky (root). Ta se změnou konfigurace Apache nezměnila, takže Nginx soubory v původní složce nenajde a přenechá je Apache – ten je obslouží, ale bez dlouhé cache.

Řešení: Změňte root i v konfiguraci Nginx na stejnou podsložku jako DocumentRoot v Apache: DetailPřehled → sekce Webserver → nabídka se třemi tečkami (⋯) → Upravit Nginx konfiguraci. Nginx pak statiku znovu servíruje přímo a s dlouhou cache.

Přesměrování přes .htaccess se neprovádí

Symptom: Vložili jsme .htaccess s rewrite pravidlem, ale k přesměrování do podsložky nedochází – web se dál načítá z původní složky.

Příčina: Doména běží v režimu čistý Nginx, kde se soubor .htaccess nepoužívá. Rewrite pravidla proto webserver ignoruje.

Řešení: Na čistém Nginx se .htaccess nepoužívá. Nejčistší je změnit webroot rovnou v konfiguraci Nginx (root) podle postupu pro vaši verzi VPS Centra. Případně můžete web přepnout na Apache, kde .htaccess funguje – ve V3 změnou režimu webserveru u domény, ve V2 přepnutím webserveru v Správa serveruWeb & FTP.

Na webhostingu nemůžeme upravit konfiguraci webserveru

Symptom: Chceme webroot přesunout trvale, ale na webhostingu nikde nevidíme, kde upravit konfiguraci webserveru.

Příčina: Webhosting běží na sdíleném serveru, kde se konfigurace webserveru neupravuje. Trvalá změna webrootu je proto dostupná jen na VPS.

Řešení: Na webhostingu použijte přesměrování přes .htaccess. Pokud potřebujete skutečné přesunutí webrootu i plné oddělení kódu aplikace od veřejné složky, zvažte přechod na virtuální server.

Pokud problém přetrvává, kontaktujte naši podporu – rádi se na nastavení vaší domény podíváme.

Frameworky jako Symfony, Laravel nebo Nette naplno využijete tam, kde máte přístup ke konfiguraci webserveru i k příkazové řádce přes SSH. Pokud zatím jedete na webhostingu a jeho možnosti vám na nasazení frameworku přestávají stačit, mrkněte na naše virtuální servery – webroot i celé prostředí tam máte plně pod kontrolou.

Pomohl vám tento článek?

Podobné články

Podpora Váš Hosting
Offline

Dobrý den! Jsem virtuální asistent Váš Hosting a jsem tu pro Vás nonstop.

Poradím Vám s doménami a DNS, s webhostingem i vlastním serverem, s e-maily, SSL certifikáty nebo verzí PHP a odpovím i na dotazy k tarifům, cenám a fakturaci. Na co se ptáte?

Nemám přístup k údajům o Vašich konkrétních službách, odpovídám orientačně. U složitějších věcí Vás předám kolegům z podpory.