Skip to content

Commit 40c8965

Browse files
committed
troubleshooting: testing .htaccess / mod_rewrite
1 parent 5c4c999 commit 40c8965

16 files changed

+608
-48
lines changed

nette/bg/troubleshooting.texy

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,11 @@ Nette не работи, показва бяла страница .[#toc-nette-i
2121
Една от най-честите причини е остарелият кеш. Докато Nette интелигентно актуализира кеша автоматично в режим на разработка, в производствен режим той се фокусира върху максимална производителност и изчистването на кеша след всяка модификация на кода зависи от вас. Опитайте да премахнете `temp/cache`.
2222

2323

24+
Грешка 404, маршрутизирането не работи .[#toc-error-404-routing-not-working]
25+
----------------------------------------------------------------------------
26+
Когато всички страници (с изключение на началната страница) връщат грешка 404, това изглежда като проблем с конфигурацията на сървъра за [красиви URL адреси |#How to Configure a Server for Nice URLs?].
27+
28+
2429
Грешка `#[\ReturnTypeWillChange] attribute should be used` .[#toc-error-returntypewillchange-attribute-should-be-used]
2530
----------------------------------------------------------------------------------------------------------------------
2631
Тази грешка се появява, ако сте обновили PHP до версия 8.1, но използвате Nette, която не е съвместима с нея. Решението е да се обнови Nette до по-нова версия с помощта на `composer update`. Nette поддържа PHP 8.1 от версия 3.0. Ако използвате по-стара версия (можете да разберете това, като погледнете `composer.json`), [обновете Nette |migrations:en] или останете с PHP 8.0.
@@ -61,7 +66,7 @@ setsebool -P httpd_can_network_connect_db on
6166

6267
Как да настроя сървъра за красиви URL адреси? .[#toc-how-to-configure-a-server-for-nice-urls]
6368
---------------------------------------------------------------------------------------------
64-
**Apache**: Разширението mod_rewrite трябва да бъде разрешено и конфигурирано в `.htaccess`.
69+
**Apache**: трябва да разрешите и зададете правила за mod_rewrite във файла `.htaccess`:
6570

6671
```apacheconf
6772
RewriteEngine On
@@ -70,19 +75,49 @@ RewriteCond %{REQUEST_FILENAME} !-d
7075
RewriteRule !\.(pdf|js|ico|gif|jpg|png|css|rar|zip|tar\.gz)$ index.php [L]
7176
```
7277

73-
За да промените конфигурацията на Apache чрез файловете .htaccess, трябва да е разрешена директивата AllowOverride. Това е поведението по подразбиране за Apache.
78+
Ако се сблъскате с проблеми, уверете се, че:
79+
- файлът `.htaccess` се намира в директорията с корена на документа (т.е. до файла `index.php` )
80+
- [Apache обработва файловете .htaccess |#Test if .htaccess is working]
81+
- [mod_rewrite е активиран |#Test if mod_rewrite is enabled]
82+
83+
Ако настройвате приложението в подпапка, може да се наложи да разкоментирате реда за настройката `RewriteBase` и да го зададете към правилната папка.
7484

7585
**nginx**: В конфигурацията на сървъра трябва да се използва директивата `try_files`:
7686

7787
```nginx
7888
location / {
79-
try_files $uri $uri/ /index.php$is_args$args; # $is_args$args важно
89+
try_files $uri $uri/ /index.php$is_args$args; # $is_args$args Е ВАЖНО!
8090
}
8191
```
8292

8393
Блокът `location` трябва да бъде дефиниран точно веднъж за всеки път към файловата система в блока `server`. Ако в конфигурацията ви вече има блок `location /`, добавете директивата `try_files` към съществуващия блок.
8494

8595

96+
Проверка дали `.htaccess` работи .[#toc-test-if-htaccess-is-working]
97+
--------------------------------------------------------------------
98+
Най-простият начин да тествате дали Apache използва или игнорира вашия файл `.htaccess` е да го нарушите умишлено. Поставете реда `Test` в началото на файла и сега, ако опресните страницата в браузъра си, трябва да видите *Internal Server Error* (Вътрешна грешка на сървъра).
99+
100+
Ако видите тази грешка, това всъщност е добре! Това означава, че Apache анализира файла `.htaccess` и се сблъсква с грешката, която сме поставили там. Премахнете реда `Test`.
101+
102+
Ако не видите *вътрешна грешка на сървъра*, вашата настройка на Apache игнорира файла `.htaccess`. Обикновено Apache го игнорира заради липсващата конфигурационна директива `AllowOverride All`.
103+
104+
Ако хоствате сами, това е достатъчно лесно да се поправи. Отворете вашия `httpd.conf` или `apache.conf` в текстов редактор, намерете съответната `<Directory>` раздел и добавете/променете директивата:
105+
106+
```apacheconf
107+
<Directory "/var/www/htdocs"> # path to your document root
108+
AllowOverride All
109+
...
110+
```
111+
112+
Ако сайтът ви е хостван на друго място, проверете в контролния панел дали можете да активирате `.htaccess` там. Ако не, свържете се с доставчика на хостинг услуги, за да го направи вместо вас.
113+
114+
115+
Проверка дали е активиран `mod_rewrite` .[#toc-test-if-mod-rewrite-is-enabled]
116+
------------------------------------------------------------------------------
117+
Ако сте проверили, че [`.htaccess` работи |#Test if .htaccess is working], можете да проверите дали разширението mod_rewrite е разрешено. Поставете реда `RewriteEngine On` в началото на файла `.htaccess` и опреснете страницата в браузъра си.
118+
Ако видите *Internal Server Error* (Вътрешна грешка на сървъра), това означава, че разширението mod_rewrite не е разрешено. Има няколко начина да го активирате. Вижте Stack Overflow за различните начини, по които това може да се направи при различните настройки.
119+
120+
86121
Връзките се генерират без `https:`. .[#toc-links-are-generated-without-https]
87122
-----------------------------------------------------------------------------
88123
Nette генерира връзки със същия протокол, който използва текущата страница. Така връзките, започващи с `https://foo` и обратно.

nette/cs/troubleshooting.texy

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,11 @@ Pokud věta `Tracy is unable to log error` v chybové hlášce (už) není, vyč
2121
Jedním z nejčastějších důvodů je zastaralá cache. Zatímco Nette ve vývojářském režimu chytře automaticky aktualizuje cache, v produkčním režimu se zaměřuje na maximalizaci výkonu a mazání cache, po každé úpravě kódu, je na vás. Zkuste smazat `temp/cache`.
2222

2323

24+
Chyba 404, nefunguje routování
25+
------------------------------
26+
Když všechny stránky (kromě homepage) vrací chybu 404, vypadá to na problém s konfigurací serveru pro [hezká URL |#Jak nastavit server pro hezká URL?].
27+
28+
2429
Chyba `#[\ReturnTypeWillChange] attribute should be used`
2530
---------------------------------------------------------
2631
Tato chyba se objeví, pokud jste aktualizovali PHP na verzi 8.1, ale používáte Nette, která s ní není kompatibilní. Řešením je tedy aktualizovat Nette na novější verzi pomocí `composer update`. Nette podporuje PHP 8.1 od verze 3.0. Pokud používáte verzi starší (zjistíte pohledem do `composer.json`), [upgradujte Nette |migrations:] nebo zůstaňte u PHP 8.0.
@@ -61,7 +66,7 @@ Pro zprovoznění aplikace na hostingu je potřeba, abyste v konfiguraci hosting
6166

6267
Jak nastavit server pro hezká URL?
6368
----------------------------------
64-
**Apache**: je potřeba povolit a nastavit rozšíření `mod_rewrite` v souboru `.htaccess`:
69+
**Apache**: je potřeba povolit a nastavit pravidla mod_rewrite v souboru `.htaccess`:
6570

6671
```apacheconf
6772
RewriteEngine On
@@ -70,19 +75,49 @@ RewriteCond %{REQUEST_FILENAME} !-d
7075
RewriteRule !\.(pdf|js|ico|gif|jpg|png|css|rar|zip|tar\.gz)$ index.php [L]
7176
```
7277

73-
Pro ovlivňování chování Apache soubory `.htaccess` je třeba mít povolenou direktivu `AllowOverride`. Toto je v Apache výchozí chování.
78+
Pokud narazíte na problémy, ujistěte se, že:
79+
- soubor `.htaccess` je nachází v adresáři document-root (tedy vedle souboru `index.php`)
80+
- [Apache zpracovává soubory `.htaccess`|#Ověření, že funguje .htaccess]
81+
- [je povolený mod_rewrite|#Ověření, že je povolený mod_rewrite]
82+
83+
Pokud nastavujete aplikaci v podsložce, možná budete muset odkomentovat řádek pro nastavení `RewriteBase` a nastavit jej na správnou složku.
7484

7585
**nginx**: je třeba nastavit přesměrování pomocí direktivy `try_files` uvnitř bloku `location /` v konfiguraci serveru.
7686

7787
```nginx
7888
location / {
79-
try_files $uri $uri/ /index.php$is_args$args; # $is_args$args je důležité
89+
try_files $uri $uri/ /index.php$is_args$args; # $is_args$args JE DŮLEŽITÉ!
8090
}
8191
```
8292

8393
Block `location` se pro každou filesystémovou cestu smí v bloku `server` vyskytovat jen jednou. Pokud již v konfiguraci `location /` máte, přidejte direktivu `try_files` do něj.
8494

8595

96+
Ověření, že funguje `.htaccess`
97+
-------------------------------
98+
Nejjednodušší způsob, jak otestovat, zda Apache používá nebo ignoruje váš soubor `.htaccess`, je záměrně jej poškodit. Vložte na začátek souboru řádek `Test` a nyní, pokud obnovíte stránku v prohlížeči, měli byste vidět *Internal Server Error*.
99+
100+
Pokud se vám tato chyba zobrazí, je to vlastně dobře! Znamená to, že Apache analyzuje soubor `.htaccess` a narazí na chybu, kterou jsme tam vložili. Odstraňte řádek `Test`.
101+
102+
Pokud se nezobrazí *Internal Server Error*, vaše nastavení Apache ignoruje soubor `.htaccess`. Obecně jej Apache ignoruje kvůli chybějící konfigurační direktivě `AllowOverride All`.
103+
104+
Pokud si jej hostujete sami, lze to snadno opravit. Otevřete soubor `httpd.conf` nebo `apache.conf` v textovém editoru, vyhledejte příslušnou část `<Directory>` a přidejte/změňte tuto direktivu:
105+
106+
```apacheconf
107+
<Directory "/var/www/htdocs"> # cesta k vašemu document root
108+
AllowOverride All
109+
...
110+
```
111+
112+
Pokud je váš web hostován jinde, podívejte se do ovládacího panelu, zda tam můžete povolit soubor `.htaccess`. Pokud ne, obraťte se na poskytovatele hostingu, aby to udělal za vás.
113+
114+
115+
Ověření, že je povolený `mod_rewrite`
116+
-------------------------------------
117+
Pokud máte ověřeno, že [funguje `.htaccess`|#Ověření, že funguje .htaccess], můžete ověřit, zda je povolené rozšíření mod_rewrite. Vložte na začátek souboru `.htaccess` řádek `RewriteEngine On` a obnovte stránku v prohlížeči.
118+
Pokud se zobrazí *Internal Server Error*, znamená to, že mod_rewrite povolený není. Existuje několik způsobů, jak jej povolit. Různé způsoby, jak to lze provést v různých nastaveních, najdete na Stack Overflow.
119+
120+
86121
Odkazy se generují bez `https:`
87122
-------------------------------
88123
Nette generuje odkazy se stejným protokolem, jaký má samotná stránka. Tedy na stránce `https://foo` generuje odkazy začínající na `https:` a obráceně.

nette/de/troubleshooting.texy

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,11 @@ Wenn der Satz `Tracy is unable to log error` nicht (mehr) in der Fehlermeldung s
2121
Einer der häufigsten Gründe ist ein veralteter Cache. Während Nette im Entwicklungsmodus den Cache automatisch aktualisiert, konzentriert es sich im Produktionsmodus auf die Maximierung der Leistung, und es liegt an Ihnen, den Cache nach jeder Codeänderung zu leeren. Versuchen Sie, `temp/cache` zu löschen.
2222

2323

24+
Fehler 404, Routing funktioniert nicht .[#toc-error-404-routing-not-working]
25+
----------------------------------------------------------------------------
26+
Wenn alle Seiten (außer der Homepage) einen 404-Fehler zurückgeben, sieht es nach einem Serverkonfigurationsproblem für [hübsche URLs |#How to Configure a Server for Nice URLs?] aus.
27+
28+
2429
Fehler `#[\ReturnTypeWillChange] attribute should be used` .[#toc-error-returntypewillchange-attribute-should-be-used]
2530
----------------------------------------------------------------------------------------------------------------------
2631
Dieser Fehler tritt auf, wenn Sie PHP auf Version 8.1 aktualisiert haben, aber Nette verwenden, das damit nicht kompatibel ist. Die Lösung besteht also darin, Nette mit `composer update` auf eine neuere Version zu aktualisieren. Nette unterstützt PHP 8.1 seit Version 3.0. Wenn Sie eine ältere Version verwenden (Sie können dies unter `composer.json` herausfinden), [aktualisieren Sie Nette |migrations:en] oder bleiben Sie bei PHP 8.0.
@@ -61,7 +66,7 @@ Die Lösung **ist** nicht, den Ordner `www/` durch Regeln in der Datei `.htacces
6166

6267
Wie konfiguriert man einen Server für schöne URLs? .[#toc-how-to-configure-a-server-for-nice-urls]
6368
--------------------------------------------------------------------------------------------------
64-
**Apache**: Die Erweiterung mod_rewrite muss erlaubt und in einer Datei `.htaccess` konfiguriert sein.
69+
**Apache**: Sie müssen mod_rewrite-Regeln in der Datei `.htaccess` aktivieren und einstellen:
6570

6671
```apacheconf
6772
RewriteEngine On
@@ -70,19 +75,49 @@ RewriteCond %{REQUEST_FILENAME} !-d
7075
RewriteRule !\.(pdf|js|ico|gif|jpg|png|css|rar|zip|tar\.gz)$ index.php [L]
7176
```
7277

73-
Um die Apache-Konfiguration mit .htaccess-Dateien zu ändern, muss die AllowOverride-Direktive aktiviert werden. Dies ist das Standardverhalten von Apache.
78+
Wenn Sie auf Probleme stoßen, stellen Sie sicher, dass:
79+
- die Datei `.htaccess` sich im Document-Root-Verzeichnis befindet (d. h. neben der Datei `index.php` )
80+
- [Apache verarbeitet die Dateien .htaccess |#Test if .htaccess is working]
81+
- [mod_rewrite ist aktiviert |#Test if mod_rewrite is enabled]
82+
83+
Wenn Sie die Anwendung in einem Unterordner einrichten, müssen Sie möglicherweise die Zeile für die Einstellung `RewriteBase` auskommentieren und auf den richtigen Ordner setzen.
7484

7585
**nginx**: Die Richtlinie `try_files` sollte in der Serverkonfiguration verwendet werden:
7686

7787
```nginx
7888
location / {
79-
try_files $uri $uri/ /index.php$is_args$args; # $is_args$args is important
89+
try_files $uri $uri/ /index.php$is_args$args; # $is_args$args IST WICHTIG!
8090
}
8191
```
8292

8393
Der Block `location` muss genau einmal für jeden Dateisystempfad im Block `server` definiert werden. Wenn Sie bereits einen `location /` -Block in Ihrer Konfiguration haben, fügen Sie die Direktive `try_files` in den bestehenden Block ein.
8494

8595

96+
Testen, ob `.htaccess` funktioniert .[#toc-test-if-htaccess-is-working]
97+
-----------------------------------------------------------------------
98+
Der einfachste Weg, um zu testen, ob der Apache Ihre `.htaccess` Datei verwendet oder ignoriert, ist, sie absichtlich zu unterbrechen. Setzen Sie die Zeile `Test` an den Anfang der Datei. Wenn Sie nun die Seite in Ihrem Browser aktualisieren, sollten Sie einen *Internal Server Error* sehen.
99+
100+
Wenn Sie diesen Fehler sehen, ist das sogar gut! Das bedeutet, dass der Apache die Datei `.htaccess` analysiert und dabei auf den Fehler stößt, den wir dort eingefügt haben. Entfernen Sie die Zeile `Test`.
101+
102+
Wenn Sie keinen *Internal Server Error* sehen, ignoriert Ihre Apache-Einrichtung die Datei `.htaccess`. Im Allgemeinen ignoriert der Apache die Datei aufgrund der fehlenden Konfigurationsanweisung `AllowOverride All`.
103+
104+
Wenn Sie die Datei selbst hosten, ist das Problem leicht zu beheben. Öffnen Sie Ihre `httpd.conf` oder `apache.conf` in einem Texteditor, suchen Sie den entsprechenden `<Directory>` Abschnitt und fügen Sie die Direktive hinzu oder ändern Sie sie:
105+
106+
```apacheconf
107+
<Directory "/var/www/htdocs"> # path to your document root
108+
AllowOverride All
109+
...
110+
```
111+
112+
Wenn Ihre Website woanders gehostet wird, sehen Sie in Ihrem Kontrollpanel nach, ob Sie `.htaccess` dort aktivieren können. Wenn nicht, wenden Sie sich an Ihren Hosting-Anbieter, damit er dies für Sie erledigt.
113+
114+
115+
Testen Sie, ob `mod_rewrite` aktiviert ist .[#toc-test-if-mod-rewrite-is-enabled]
116+
---------------------------------------------------------------------------------
117+
Wenn Sie sich vergewissert haben, dass [`.htaccess` funktioniert |#Test if .htaccess is working], können Sie überprüfen, ob die mod_rewrite-Erweiterung aktiviert ist. Setzen Sie die Zeile `RewriteEngine On` an den Anfang der Datei `.htaccess` und aktualisieren Sie die Seite in Ihrem Browser.
118+
Wenn Sie einen *Internal Server Error* sehen, bedeutet dies, dass mod_rewrite nicht aktiviert ist. Es gibt eine Reihe von Möglichkeiten, es zu aktivieren. Auf Stack Overflow finden Sie verschiedene Möglichkeiten, wie dies bei unterschiedlichen Konfigurationen geschehen kann.
119+
120+
86121
Links werden ohne `https:` erzeugt. .[#toc-links-are-generated-without-https]
87122
-----------------------------------------------------------------------------
88123
Nette generiert Links mit demselben Protokoll, das die aktuelle Seite verwendet. Auf der Seite `https://foo` beginnen, und andersherum.

0 commit comments

Comments
 (0)