Nefunguje htpasswd kvůlu /web/www/.htaccess RewriteRule

scientific
Člen | 94
+
0
-

Napadá vás prosím někoho proč mít /web/www/.htaccess

tento obsah?

# Apache configuration file (see httpd.apache.org/docs/current/mod/quickreference.html)

# disable directory listing
<IfModule mod_autoindex.c>
Options -Indexes
</IfModule>

# enable cool URL
<IfModule mod_rewrite.c>
RewriteEngine On
# RewriteBase /

# prevents files starting with dot to be viewed by browser
RewriteRule /\.|^\. – [F]

# front controller
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule !\.(pdf|js|ico|gif|jpg|png|css|rar|zip|tar\.gz|map)$ index.php [L]
</IfModule>

# enable gzip compression
<IfModule mod_deflate.c>
<IfModule mod_filter.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/x-javascript text/javascript application/javascript application/json
</IfModule>
</IfModule>

Konkrétně mi jde o pravidlo front controlleru:
RewriteRule !\.(pdf|js|ico|gif|jpg|png|css|rar|zip|tar\.gz|map)$ index.php [L]
Toto pravidlo způsobuje, že mi v /web/www/zaheslovany/.htaccess nefunguje konfigurace zaheslovaného adresáře přes .htpasswd.

Děkuji všem za informaci proč to tam, je, a jaké výhody/nevýhody by mělo zakomentování toho řádku.

chemix
Nette Core | 1310
+
+2
-

Ahoj @scientific jednotlive sekce urcite dohledas v dokumentaci apache. A na tvoji konkretni otazku

RewriteRule !\.(pdf|js|ico|gif|jpg|png|css|rar|zip|tar\.gz|map)$ index.php [L]

Je pro zaply mod_rewrite, ktery se stara o hezka url. Defakto je tam napsano. Jakykoli request na server co nema koncovku (pdf,js,ico,gif…) tak presmeruj na index.php

⇒ Nette aplikace, ktera bezi v index.php se nezajima o obrazky, pdf soubory apd… ty apache vraci rovnou, nebo hodi Apache 404 ale cokoli dalsiho se bude snazit nejak zpracovat interne v routeru a po vyhodnoceni routeru bud zobrazit to co ma nebo Nette 404

scientific
Člen | 94
+
-2
-

Děkuji ti, já si to pravidlo přeložit umím, jen nechápu jeho význam, proč tam to pravidlo je. Z mého amatérského pohledu je úplně k ničemu a jen mi ničí htpasswd výše.

Ptám se spíše, proč bych ten řádek prakticky neměl zakomentovat? Jaké jsou jeho praktické výhody? Však je úplně k ničemu ne?

Píšeš, že co nemá příponu by se mělo přesměrovat na index.php, myslím, že se pleteš. Nemělo by dojít k přesměrování, ale pouze k přepisu URL. Nevidím k tomu žádný důvod, kor když tam mám vedle Nette všemožné Paypal, GoPay, apod. skripty.

Nechápu proč by se /web/www/paypal/ipn-hook.php mělo jakkoliv přesměrovávat či přepisovat na index.php.

Rovněž nevidím důvod přidávat ten paypal do routeru, ani to neřeší problém s tím, že nefungují htaccessy a htpasswd výše.

Potvrzuji, že po přidání htaccessu a htpasswd mi skript začne předkládat 404, což je nežádoucí pro spouštění skriptu cronem a vlastně pro jakékoliv fungování.

Editoval scientific (21. 12. 2021 7:39)

David Grudl
Nette Core | 8227
+
+3
-

Pokud nechceš, aby všechny URL mělo v režii Nette, tak přepisování klidně vypni a pravidlo odstraň.

dakur
Člen | 493
+
+1
-

@scientific Jak píše @chemix, je to tam proto, aby v Nette fungovaly „cool url“. Bez toho pravidla by fungovala jen jediná adresa a to /index.php, pravidlo umožňuje, že funguje i např. /articles/256/detail*

Jinak se mi teda úplně nezdá, že by to nějak ovlivňovalo fungování .htpasswd (ale jistě to nevím), nic Ti ale nebrání do toho pravidla přidat právě zaheslovany adresář, zhruba nějak takto:

RewriteRule !(zaheslovany)|(\.(pdf|js|ico|gif|jpg|png|css|rar|zip|tar\.gz|map))$ index.php [L]
// edit: pravda, rewrite cond je elegantnější

* Konkrétně to funguje tak, že ať vložíš do URL cokoliv, vždycky se ve finále zavolá index.php. Ten se do té URL podívá sám přes $_SERVER proměnnou a vyhodnotí, které pravidlo v routeru dané cestě odpovídá – podle toho zavolá daný presenter+view.

Editoval dakur (21. 12. 2021 10:21)

neznamy_uzivatel
Člen | 115
+
+1
-

scientific napsal(a):

Ptám se spíše, proč bych ten řádek prakticky neměl zakomentovat? Jaké jsou jeho praktické výhody? Však je úplně k ničemu ne?
Nechápu proč by se /web/www/paypal/ipn-hook.php mělo jakkoliv přesměrovávat či přepisovat na index.php.

Protože to zařizuje, aby requesty šly do nette, jinak by tam byl jen nějaký ten SimpleRouter s odkazy přímo na index.php.
„úplně k ničemu“ je spíš to zakomentovávání…
Máš před tím ještě RewriteCond, existující ipn-hook.php ti to nikam přesměrovávat, ani přepisovat nebude.

Editoval neznamy_uzivatel (21. 12. 2021 10:20)

chemix
Nette Core | 1310
+
+1
-

Pridam jeste, ze kvuli svym php scriptum nemusis nic v nette aplikaci definivat jelikoz je tam

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

Cimz cely ten nasledny preklad hezkych url se resi jen v pripade neexistence skutecneho souboru. Takze neco jako domain.ltd/legacy/cron/every_day.php pokud bude existovat jako realny soubor, tak ho jen ciste zpracuje apache a php.

scientific
Člen | 94
+
0
-

Vlk se nažere a koza zůstane celá, geniální, díky moc.

Používám tedy takto:

		RewriteRule !(zaheslovany1)|(zaheslovany2)|(\.(pdf|js|ico|gif|jpg|png|css|rar|zip|tar\.gz|map))$ index.php [L]

dakur napsal(a):

@scientific Jak píše @chemix, je to tam proto, aby v Nette fungovaly „cool url“. Bez toho pravidla by fungovala jen jediná adresa a to /index.php, pravidlo umožňuje, že funguje i např. /articles/256/detail*

Jinak se mi teda úplně nezdá, že by to nějak ovlivňovalo fungování .htpasswd (ale jistě to nevím), nic Ti ale nebrání do toho pravidla přidat právě zaheslovany adresář, zhruba nějak takto:

RewriteRule !(zaheslovany)|(\.(pdf|js|ico|gif|jpg|png|css|rar|zip|tar\.gz|map))$ index.php [L]
// edit: pravda, rewrite cond je elegantnější

* Konkrétně to funguje tak, že ať vložíš do URL cokoliv, vždycky se ve finále zavolá index.php. Ten se do té URL podívá sám přes $_SERVER proměnnou a vyhodnotí, které pravidlo v routeru dané cestě odpovídá – podle toho zavolá daný presenter+view.

scientific
Člen | 94
+
0
-

Tak ne nefunguje to, celé jsem to zakomentoval a mám na salámu. :-D

Kdyby někdo věděl, jak to udělat, že bych tam ty dva vyloučené zaheslované adresáře zandal, aby těch se to netýkalo, tak budu rád, jinak to zakomentuji, snad se tím nikde žádná URL nebudou rozbíjet.

Díky všem.

Milo
Nette Core | 1283
+
0
-

@scientific V adresáři zaheslovany si vytvoř .htaccess, který bude obsahovat:

RewriteEngine On

To vyřadí všechna rewrite pravidla z .htaccess z nadřazených složek.

scientific
Člen | 94
+
0
-

Buď nefunguje Nette nebo nefunguje spuštění scriptu prohlížečem, když obojí funguje správně, tak pro změnu zase nefunguje CRON, jak to prosím má být správně?

Rady výše nepamáhají, již jste mi radili:

  • Přidat do web/www/zaheslovany/.htaccess RewriteEngine On
  • Zakomentovat řádek, který ničí funkčnost #RewriteRule !\.(pdf|js|ico|gif|jpg|png|css|rar|zip|tar\.gz|map)$ index.php [L]
  • Upravit řádek RewriteRule !(zaheslovany1)|(\.(pdf|js|ico|gif|jpg|png|css|rar|zip|tar\.gz|map))$ index.php [L]

Rekapitulace mého nastavení:

web/.htaccess:

RewriteEngine On
RewriteRule (.*) www/$1 [L]

<FilesMatch "^(admin|staff).php$">
	AuthName "Dialog prompt"
	AuthType Basic
	AuthUserFile /home/username/example.com/.htpasswd
	Require valid-user
</FilesMatch>

web/www/.htaccess:

# Apache configuration file (see httpd.apache.org/docs/current/mod/quickreference.html)

# disable directory listing
<IfModule mod_autoindex.c>
	Options -Indexes
</IfModule>

# enable cool URL
<IfModule mod_rewrite.c>
	RewriteEngine On
	# RewriteBase /

	# prevents files starting with dot to be viewed by browser
	RewriteRule /\.|^\. - [F]

	# front controller
	RewriteCond %{REQUEST_FILENAME} !-f
	RewriteCond %{REQUEST_FILENAME} !-d
	#RewriteRule !(zaheslovany1)|(\.(pdf|js|ico|gif|jpg|png|css|rar|zip|tar\.gz|map))$ index.php [L]
	#RewriteRule !(zaheslovany1)|(zaheslovany2)|(\.(pdf|js|ico|gif|jpg|png|css|rar|zip|tar\.gz|map))$ index.php [L]
	RewriteRule !\.(pdf|js|ico|gif|jpg|png|css|rar|zip|tar\.gz|map)$ index.php [L]
</IfModule>

# enable gzip compression
<IfModule mod_deflate.c>
	<IfModule mod_filter.c>
		AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/x-javascript text/javascript application/javascript application/json
	</IfModule>
</IfModule>

web/www/zaheslovany/.htaccess

RewriteEngine On

## ISPConfig folder protection begin ###
AuthType Basic
AuthName "Members Only"
AuthUserFile /var/www/clients/client1/web247/web/.htpasswd
require valid-user
## ISPConfig folder protection end ###

#order deny,allow
#deny from all

Editoval scientific (27. 12. 2021 11:33)

Milo
Nette Core | 1283
+
+1
-

Když v .htaccess nastavíš RewriteEngine on nebo off, přestanou se defaultně aplikovat rewrite pravidla z nadřazených složek. Takže konfigurace web/www/.htaccess vyřadí pravidla z web/.htaccess. Dá se to řešit pomocí InheritRewriteOptions.

Poradil bych konkrétně, ale zdá se mi, že každý další post řešíš něco dalšího.

Například pro „/web/www/paypal/ipn-hook.php“… Vytvořil bych soubor /web/www/paypal/.htaccess s obsahem:

RewriteEngine off

To vyřadí rewrite pravidla z /web/www/.htaccess, takže ipn-hook.php by se ti neměl přepisovat. Konec konců on by se ti neměl přepisovat i bez toho a to díky pravidlu RewriteCond %{REQUEST_FILENAME} !-f.

Obecně – řešení bys měl hledat v dokumentaci Apache, s Nette to moc nesouvisí. Nette pouze potřebuje rewrite na index.php aby fungovali cool URL.

scientific
Člen | 94
+
0
-

Původně jsi psal On, tak jsem tedy dal Off, ale nehraje to roli. Dokud tam mám v tom htaccessu ten přepis na Nette cool URl, tak Cron vidí 404, popř. 500, ale když zakomentuji ten nette cool URl přepis, tak tak do access logu v pohodě začne skákat 200 a vše funguje.

Přestože přes prohlížeš mi ten skript spouštět jde v pohodě, cron vidí 404. Jak je to prosím možné? Jedná se o cron zadaný jako https cron v ISPConfigu, myslím, že v accesslogu to je jako Ubuntu Firefox. Jak to fixnout? Přiznávám, že to asi není tak úplně problém Nette, i když jak se to vezme. Ničí to provoz webu a když to zakomentuji, tak Nette nefunguje správně, takže se to vlastně Nette týká.

Milo
Nette Core | 1283
+
0
-

A jaké je nastavení document_root, v jakém adresáři je web a jaké jsou konkrétní URL?