Základy konfigurace Apache pro aplikace Laravel

Jak nakonfigurovat Apache pro Laravel V tomto návodu nakonfigurujete Apache tak, aby správně obsluhoval aplikaci Laravel prostřednictvím veřejného front controlleru index.php. Uvi...

Poptat web

01. 12. 2025

Základy konfigurace Apache pro aplikace Laravel

Jak nakonfigurovat Apache pro Laravel

V tomto návodu nakonfigurujete Apache tak, aby správně obsluhoval aplikaci Laravel prostřednictvím veřejného front controlleru index.php. Uvidíte, jak to funguje pro jednu doménu, více projektů, podadresáře a prostředí sdíleného hostingu. Vše se odehrává na úrovni Apache pomocí souborů virtual host a pravidel htaccess, nikoli php artisan serve. Na konci můžete nasměrovat prohlížeč na svou doménu a spustit trasy Laravel, aniž byste se dotkli veřejné cesty v url.

Požadavky Apache Laravel očekává

Laravel nepotřebuje exotické moduly Apache, ale hodně spoléhá na přepisování url a podporu htaccess. Zde je minimální nastavení Apache, které byste měli mít, než se začnete zabývat virtuálními hostiteli.

Povolení modulu pro přepisování

V systémech založených na Debianu nebo Ubuntu obvykle povolíte modul pro přepisování pomocí:

sudo a2enmod rewrite
sudo systemctl reload apache2

Spusťte tyto příkazy v terminálu serveru jako uživatel s přístupem sudo. V jiných distribucích se ujistěte, že je modul pro přepisování načten v hlavním konfiguračním souboru Apache, například /etc/httpd/conf/httpd.conf, pomocí direktivy LoadModule. Bez podpory přepisování nebudou trasy Laravel fungovat a každý požadavek na neexistující soubor vrátí surový kód Apache 404.

Povolení přepisů htaccess v adresáři projektu

Laravel je dodáván se souborem public/.htaccess, který obsahuje pravidla pro přepisování. Apache musí mít povoleno tento soubor číst a používat. V typické konfiguraci Debianu nebo Ubuntu upravíte blok hlavního adresáře uvnitř souboru /etc/apache2/apache2.conf:

<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>

Důležitý je řádek AllowOverride All, který Apache říká, aby respektoval soubory htaccess pod touto cestou. Pokud je tato hodnota nastavena na None, budou pravidla Laravel pro přepisování ignorována, i když je modul povolen.

Pokud je váš projekt Laravel umístěn jinde, například v /var/www/myapp, můžete pravidlo omezit přidáním vyhrazeného bloku do souboru apache2.conf nebo hlavního konfiguračního souboru Apache:

<Directory /var/www/myapp/public>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>

Výchozí soubor Laravel htaccess ve veřejném adresáři

Laravel očekává, že Apache bude ukazovat na veřejný adresář jako na kořenový adresář dokumentu. Uvnitř tohoto adresáře používá htaccess ke směrování požadavků na index.php. Vytvořte nebo upravte soubor public/.htaccess ve svém projektu Laravel a vložte do něj tento soubor:

<IfModule mod_rewrite.c>
RewriteEngine On
 
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>

Tím se dosáhne tří věcí:

  • Zapne přepisovací engine pro daný adresář.
  • Pokud požadovaná cesta není existující adresář ani existující soubor, přepíše požadavek na index.php.
  • Umožňuje Apache obsluhovat skutečné soubory a adresáře přímo bez zásahu do Laravelu.

Pokud má Apache pro veřejný adresář nastaveno AllowOverride All a je povolen modul pro přepisování, není obvykle nutné tento soubor měnit.

Virtuální hostitel Apache pro jednu aplikaci Laravel

Toto je nejběžnější produkční nastavení: jedna doména směřující na jednu aplikaci Laravel. Klíčem je, aby Apache obsluhoval veřejný adresář jako kořenový adresář dokumentu, nikdy ne jako kořenový adresář projektu.

Příklad virtuálního hostitele v Debianu nebo Ubuntu s instalací Apache. Vytvořte nový soubor webu, například /etc/apache2/sites-available/example.conf, a vložte do něj tento soubor:

<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
 
DocumentRoot /var/www/example/current/public
 
<Directory /var/www/example/current/public>
AllowOverride All
Require all granted
</Directory>
 
ErrorLog ${APACHE_LOG_DIR}/example_error.log
CustomLog ${APACHE_LOG_DIR}/example_access.log combined
</VirtualHost>

Důležité součásti této konfigurace:

  • Tento virtuální hostitel se uloží do souboru webu, například /etc/apache2/sites-available/example.conf, a povolí se příkazem sudo a2ensite example.conf.
  • DocumentRoot ukazuje na veřejný adresář Laravel, nikoli na kořenový adresář projektu.
  • Blok Adresář pro tuto cestu umožňuje htaccess, takže pravidla Laravel pro přepisování jsou aktivní.
  • ServerName a ServerAlias říkají Apache, které hlavičky hostitele mají zasáhnout tuto aplikaci.

V Debianu nebo Ubuntu tento soubor obvykle uložíte jako /etc/apache2/sites-available/example.conf, povolíte jej a znovu načtete:

sudo a2ensite example.conf
sudo systemctl reload apache2

V jiných distribucích se umístění souboru a pomocné příkazy liší, ale obsah VirtualHostu je stejný.

Přidání virtuálního hostitele https pro Laravel

Pokud máte pro svou doménu certifikát ssl, spárujete virtuálního hostitele http s hostitelem https. Jediný detail specifický pro Laravel je, že kořenový adresář dokumentu a pravidla adresáře jsou totožná.

Přidejte druhý blok VirtualHost do stejného souboru s definicí webu, například /etc/apache2/sites-available/example.conf:

<VirtualHost *:443>
ServerName example.com
ServerAlias www.example.com
 
DocumentRoot /var/www/example/current/public
 
<Directory /var/www/example/current/public>
AllowOverride All
Require all granted
</Directory>
 
SSLEngine on
SSLCertificateFile /etc/ssl/certs/example.crt
SSLCertificateKeyFile /etc/ssl/private/example.key
 
ErrorLog ${APACHE_LOG_DIR}/example_ssl_error.log
CustomLog ${APACHE_LOG_DIR}/example_ssl_access.log combined
</VirtualHost>

Pokud oba virtuální hostitelé sdílejí stejný kořenový adresář dokumentu a pravidla adresáře, Laravel se nestará o to, zda požadavek přišel přes http nebo https.

Místní vývojový virtuální hostitel pro Laravel

Pro místní práci můžete chtít čistou doménu, jako je myapp.test, místo použití php artisan serve nebo přidávání /public k adresám URL. Struktura je téměř totožná s produkčním virtuálním hostitelem, jen s cestou a doménou orientovanou na vývoj.

Příklad na typické pracovní stanici se systémem Linux:

Vytvořte nový soubor virtuálního hostitele, například /etc/apache2/sites-available/myapp.test.conf, a umístěte jej do něj:

<VirtualHost *:80>
ServerName myapp.test
 
DocumentRoot /home/username/dev/myapp/public
 
<Directory /home/username/dev/myapp/public>
AllowOverride All
Require all granted
</Directory>
</VirtualHost>

Povolte web a znovu načtěte Apache, například pomocí sudo a2ensite myapp.test.conf a sudo systemctl reload apache2.

Poté přidejte záznam do místního souboru hosts, aby se doména překládala lokálně. V Linuxu a macOS upravte /etc/hosts, v systému Windows upravte C:\Windows\System32\drivers\etc\hosts a přidejte:

127.0.0.1 myapp.test

Po opětovném načtení aplikace Apache můžete přejít na stránku http://myapp.test a přímo zasáhnout do vašich tras Laravel.

Více aplikací Laravel na jednom serveru Apache

Pokud hostujete několik projektů Laravel na stejné instanci Apache, obvykle vytvoříte jednoho virtuálního hostitele pro každou doménu nebo subdoménu, aby každá aplikace zůstala izolovaná. Jediné pravidlo specifické pro Laravel zůstává pokaždé stejné: kořenový adresář dokumentu musí být veřejný adresář.

Příklad se dvěma aplikacemi na stejném serveru, z nichž každá je definována ve vlastním souboru site v adresáři /etc/apache2/sites-available nebo v jednom souboru vhosts, v závislosti na uspořádání:

<VirtualHost *:80>
ServerName crm.example.com
DocumentRoot /var/www/crm/current/public
<Directory /var/www/crm/current/public>
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
 
<VirtualHost *:80>
ServerName shop.example.com
DocumentRoot /var/www/shop/current/public
<Directory /var/www/shop/current/public>
AllowOverride All
Require all granted
</Directory>
</VirtualHost>

Každá aplikace Laravel je izolovaná, má vlastní protokoly a může být nasazena nezávisle, zatímco Apache udržuje jednoduchá pravidla.

Servírování aplikace Laravel z podadresáře

Někdy nemůžete Laravelu věnovat celou doménu nebo subdoménu. Místo toho ji možná budete muset obsluhovat pod cestou, jako je example.com/app. Laravel si s tím poradí, pokud Apache tuto cestu přesměruje do veřejného adresáře.

Použití aliasu pro podadresář

Čistým přístupem je ponechat kořenový adresář hlavního dokumentu webu tak, jak je, a použít alias pro cestu Laravel. Upravte stávající definici VirtualHost pro example.com, obvykle v souboru /etc/apache2/sites-available/example.conf nebo v ekvivalentním souboru, a upravte ji takto:

<VirtualHost *:80>
ServerName example.com
DocumentRoot /var/www/html
 
Alias /app /var/www/app/current/public
 
<Directory /var/www/app/current/public>
AllowOverride All
Require all granted
</Directory>
</VirtualHost>

Děje se toto:

  • Požadavky na adresu example.com stále směřují do hlavního kořene dokumentu /var/www/html.
  • Požadavky, jejichž cesta začíná lomítkem app, jsou interně mapovány do veřejného adresáře Laravel.
  • Blok adresářů opět umožňuje htaccess, takže rámcová pravidla pro přepisování běží správně.

Laravel uvidí aplikaci v cestě /app, takže adresy URL tras budou automaticky obsahovat tuto předponu, pokud použijete pomocné adresy URL.

Použití htaccess v kořenovém adresáři hlavního dokumentu

Pokud nechcete nebo nemůžete upravovat hlavního virtuálního hostitele, můžete do kořenového souboru htaccess dokumentu umístit pravidla přepisu, která předají konkrétní cestu do Laravelu. To je běžné v případě, že řídicí panel spravuje Apache a vystavuje pouze htaccess.

Příklad htaccess umístěný v kořenovém adresáři hlavního dokumentu, který odesílá požadavky /app do Laravelu. Vytvořte nebo upravte soubor .htaccess v kořenovém adresáři hlavního dokumentu, například /var/www/html/.htaccess nebo public_html/.htaccess, a přidejte:

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

V kombinaci s výchozím htaccess Laravel uvnitř veřejného adresáře to umožňuje uživatelům přistupovat k aplikaci na adrese example.com slash app, aniž by viděli veřejný segment.

Konfigurace Apache, když ovládáte pouze htaccess

V mnoha sdílených hostingových prostředích nemáte přímý přístup k souborům virtuálního hostitele Apache. Místo toho nahráváte soubory do kořenového adresáře dokumentu, jako je public_html, a chování řídíte pomocí htaccess. Tímto způsobem můžete stále provozovat Laravel a zároveň zachovat public jako vstupní bod webu.

Předpokládejme, že vám hostitel přidělil kořenový adresář dokumentu /home/user/public_html a vy jste nainstalovali Laravel přímo do tohoto adresáře. Nakonec získáte adresář public_html/public, který obsahuje index.php a assets. Cílem je skrýt veřejný segment před návštěvníky.

Vytvořte nebo upravte soubor /home/user/public_html/.htaccess s pravidly, která předají vše do veřejného adresáře Laravel:

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

Poté zajistěte, aby veřejný adresář Laravel měl svůj vlastní soubor .htaccess, a použijte minimální pravidla uvedená dříve. Průběh vypadá následovně:

  • Kořenový htaccess přepisuje všechny požadavky do veřejného adresáře.
  • Jakmile se požadavek dostane na veřejnou stránku, pravidla Laravel pro přepisování odešlou požadavky, které se netýkají souborů a adresářů, na stránku index.php.
  • Souborů jádra frameworku se nedotýkáte ani je nepřesouváte z jejich výchozího umístění.

Pokud je Laravel nainstalován v podadresáři kořenového adresáře hostitelského dokumentu, upravte podle toho cílovou cestu uvnitř pravidla.

Závěr

K tomu, aby aplikace Laravel správně sloužila, potřebuje Apache jen malé množství konfigurace. Hlavní myšlenkou každého nastavení je, že kořenový adresář dokumentu nebo cíl přepisu musí být vždy veřejný adresář Laravel. Tohoto cíle můžete dosáhnout pomocí přímých souborů virtuálního hostitele, pravidel aliasů nebo nastavení htaccess pouze na sdíleném hostingu. Jakmile Apache ukazuje na veřejný adresář a podpora přepisování je aktivní, Laravel převezme směrování a vaše aplikace se bude chovat stejně v každém prostředí.

Původní článek publikoval Nabil Hassen.