Autor Zpráva
dbe_trainee
Profil *
Ahojte. Začal jsem se učit dělat webové aplikace. Používám FileZillu a rovnou si všechny soubory odesílám na testovací server. Struktura důležitých adresářů a souborů vypadá nějak takto:

.htaccess
app
public
  -> index.php

Rád bych, aby se každý návštěvník dostal automaticky do složky public, resp. k souboru index.php v této složce, aniž by było "public" zobrazeno v URL.
Dá se to nějak udělat přes soubor .htaccess? Zkoušel jsem některá řešení ze StackOverflow a i tady jsem něco našel. Taky jsem to testoval na localhostu, ale bohužel jako by .htaccess neexistoval, objevil se jen index adresáře (výpis souborů a podadresářů), které spadají pod root.

Děkuji za každý podnět!
dbe_trainee
Profil *
Prosím, někdo dejte vědět, urcitě je to pro některé z vás bězná věc, vůbec tomu nerozumím. Děkuji
Marschmallow
Profil
dbe_trainee:
Pokud budeš na webhosting přistupovat před doménu ahoj.cz, tak by mělo fungovat toto:
RewriteCond %{HTTP_HOST} ^ahoj.cz$
RewriteCond %{REQUEST_URI} !^/public/
RewriteRule (.*) /public/$1 [L]
dbe_trainee
Profil *
Ahoj Marschmallow,
mockrát děkuji, funguje přesně, jak jsem potřeboval a očekával, super. Mimochodem, je to bezpečné, pokud budu mít ve složce app další .htaccess :
Options -Indexes
a ve stejné složce přístupová data pro připojení k mysql serveru?
Marschmallow
Profil
dbe_trainee:
Radši tam dej
deny from all
Tedy v případě, že se do té složky nedostane uživatel, ale pouze interní (třeba) PHP skript.
dbe_trainee
Profil *
Marschmallow:

Jde o PHP aplikaci založené na MVC a mým cílem je, jak už názvy složek napovídají, aby se uživatel dostal jen k public/index.php, kde je vyžádání (require) souborů ze složky app a inicializace třídy. Doufám, že nedělám nějakou začátečnickou chybu... Tak jako tak, ještě jednou moc díky, opravdu jsi mi pomohl a teď tomu s .htaccess už rozumím.
Marschmallow
Profil
dbe_trainee:
Teď ještě jednou koukám na tu Tvojí adresářovou strukturu a pokud je .htaccess nastaven správně (viz. [#3]), tak se uživatel nemůže dostat do složky app, protože je o úroveň výš (respektive ve stejné úrovni) jako public, ale v jiné složce. Máš to správně.
dbe_trainee
Profil *
Marschmallow:

Perfektní!
No, to jsem si právě nebyl jistý, že nemůže, že není nějaký způsob, jak se to dá obejít. Tak jsem rád, že mám (zatím) čistý štít..
Keeehi
Profil
Ale dá se tam dostat. Ten rewrite dělá jen to, že vytváří nové URL, na kterých je nově nějaký obsah dostupný. Ale na tech starých URL ten obsah pořád zůstává. Sice to v to na stránkách nikde používat nebudeš, ale pokud někdo tu adresu uhodne, tak si to může zobrazit.
Tudíž pokud to neošetřš, budou přístupné tyto adresy:
example.com/public/index.php
example.com/app/secret-file
První musíš řešit v aplikaci. Prostě si úplně na začátku zjistíš, co uživatel doopravdy zadal do adresního řádku a kdyžtak ho přesměruješ na správnou verzi. To abys neměl duplicitní obsah.
A tu druhou vyřešíš přidáním právě dalšího htaccess do složky app s výše zmiňovaným deny from all. Pro Apache 2.4 se používá něco jiného. Tak pokud je to tvá verze tak si to vyhledej nebo se tu doptej.
dbe_trainee
Profil *
Keeehi:

Ahoj, díky za upozornění.
Řešit to budu v .htaccess pro adresář public, je to tak? (example.com/public/index.php)

Na lokálním serveru používám Apache 2.4.10, na testovacím hostingu se mně nepodařilo zjistit, jaká verze Apache je tam nainstalovaná. Není to uvedené ani v phpinfo() ani v apache_get_version(). Pokud jsem četl dobře, nejspíš je to kvůli nastavení v httpd.conf, ke kterému nemám přístup. Nicméně na obou serverech deny from all vyhazuje 403, jak se očekává. Má nějaký důvod, proč používat něco jiného?

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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