Autor Zpráva
j_hajsl
Profil
Zdravím,

zkouším nastavit apache, tak aby podstrčil místo neexistujícího obrázku svůj obrázek "no_foto.png". V .htaccess jsem zkoušel toto

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .\png$ /cesta/no_foto.png [L]
nebo

RewriteEngine On
RewriteCond %{REQUEST_URI] .\(png)$ [NC]
RewriteCond %{REQUST_FILENAME} !-f
RewriteCond %{REQUST_FILENAME} !-d
RewriteRule .*$ /cesta/no_foto.png [L]

obojí funguje tak, že se nahradí obrázek jen v případě, že neexistuje obrázek, ale ani adresář v němž má být, např. volám /adr1/foto1.png

1. pokud neexistuje adr1, tak je to v pořádku a vrátí se /cesta/no_foto.png
2. pokud adresář adr1 existuje, ale foto1.png nikoli vrací mi server chybu 403 a v logu pak vidím, že se apache pokuší načíst .htaccess právě z adresáře adr1, kde ovšem není.

Existuje cesta (kromě toho, že do všech těch podadresářů - je jich cca 5000 - nalinkuji .htaccess z rootu) jak donutit apache číst .htaccess z rootu bez ohledu na to, zda adresář adr1 existuje?

Hledal jsem samozřejmě v google i tady, ale nejblíže se mi jeví téma Náhrada neexistujícího obrázku, kterému ale tehdy odpovídací nerozuměli a dotazující ho neupřesnil, protože neměl možnost se podívat do logu apache, ale myslím, že je to ono.
Keeehi
Profil
j_hajsl:
v logu pak vidím, že se apache pokuší načíst .htaccess právě z adresáře adr1
Mohl by jsi sem nakopírovat ten záznam, podle kterého tak soudíš?

Schválně jsem to vyzkoušel a funguje mi to takto:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule \.png$ no_foto.png [L]
Kajman
Profil
j_hajsl:
Je adr1 nějak omezen právy, že se tam apache nedostane?

Změní se chování při přidání
Options +FollowSymlinks
do .htaccess v rootu?

Změní se chování při přidání prázdného .htaccess do adresáře s obrázky?

Pokud jsou adresáře s obrázky pod nějakým společným adresářem, tak by mělo jít pro tento adresář zakázat nahlížení do souborů .htaccess, ale jde to jen přímo v konfiguraci apache díky
<Directory /images>
  AllowOverride None
</Directory>
(Pokud ale můžete konfigurovat přímo apache, tak je lepší napsat pravidla tam a .htaccess z výkonových důvodů úplně zakázat.)
j_hajsl
Profil
Keeehi, Kajman

Děkuji za odpovědi, chyba byla mezi židlí a klávesnici, nad dotčenými složkami nebyla dostatečná oprávnění, po opravě se to chová, tak jak jsem očekával. Nastavil jsem pravidla i přímo v nastavení virtual hosta a funguje to.

Zajímavosti je, že pokud sadu příkazu Rewrite... neuzavřu do <Directory "virtualhost_root">, a dám to volně do <VirtualHost ...>, tak to náhodně nahrazuje i existující soubory a žádnou chybu v konfiguraci nenahlásí, pokud je to uvnitř <Directory> tak je to v pořádku. To, že to musí být v Directory nebo htaccess se píše v dokumentaci, takže asi nemá význam řešit.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0