Diskuze: Pokročilejší .htaccess

Webové servery Pokročilejší .htaccess

Avatar
Matúš Petrofčík
Šéfredaktor
Avatar
Matúš Petrofčík:

Zdravím, našiel by sa nejaký odborník do .htaccess súborov?
Konkrétne by som potreboval kód, ktorý zapne mod_rewrite, ak v adrese nie je www. tak aby to tam pridalo, a aby sa nastavilo presmerovanie na index.php pokiaľ súbor neexistuje (samozrejme povoliť len niektoré súbory ako .jpg, .css, .ico ...)

toto som poskladal pomocou googlovania, ale úprimne, neviem čo to robí a rád by som, ak by mi niekto vysvetlil a poprípade navrhol lepšie riešenie :) verím že sa niekto nájde

Options -Indexes

RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} !www.([^.]+).([a-z]{2,5})$
RewriteRule (.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php [L]

AddType application/x-httpd-php .php .phtml
Odpovědět 3.8.2014 21:00
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Filip Šohajek
Redaktor
Avatar
Filip Šohajek:

Ahoj, tvůj seskládaný .htaccess by měl fungovat perfektně, ale vysvětlím ti, co jednotlivé položky znamenají.
První řádek zakazuje dir. Listing.
Druhý zapíná mod_rewrite.
Třetí nastavuje kořen pro mod_rewrite.
Čtvrtý definuje pravidlo, tedy pokud bude splněna tato podmínka, upraví se dle RewriteRule níže. Zde to znamená, že pokud není přítomno www a je přítomna adresa dle RFC 1035, potom vrať klientovi návratový kód 301 a adresu s www.
Další dva řádky definují podmínku, pokud není žádaný soubor/složka nalezen, a pokud není přípona souboru v seznamu povolených, vrať klientovi index.php.
Na dalším řádku se definuje, které typy souborů budou přepracovány phpčkem, než se zobrazí klientovi.

Editováno 3.8.2014 22:41
 
Nahoru Odpovědět 3.8.2014 22:40
Avatar
Matúš Petrofčík
Šéfredaktor
Avatar
Odpovídá na Filip Šohajek
Matúš Petrofčík:

-f je predpokladám file, -d directory, neviem čo však v 4. riadku znamená {2,5}, a ako vlastne funguje tá podmienka pre povolené súbory?

Veľmi som sa tým nezaoberal, nakoľko som si veľa vecí overoval cez php, ale príde mi to zbytočné pokiaľ sa server dá nastaviť takto (poprípade v httpd.conf).

Mal by si (alebo poznáš) nejaký zrozumiteľný manuál v CZ/SK jazyku? Anglicky viem, ale trvá mi to príliš dlho. :)
Ďakujem.

Editováno 4.8.2014 0:58
Nahoru Odpovědět 4.8.2014 0:58
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Matúš Petrofčík
Šéfredaktor
Avatar
Odpovídá na Filip Šohajek
Matúš Petrofčík:

asi to nemám najlepšie, lebo ak tam zadám m.dačo.sk, tak sa mi to zacyklí

http://www.www.www.www.www.www.www.www.www.www.www.www.www.www.www.www.www.www.www.www.www.m.dačo.sk

a to nechcem

Nahoru Odpovědět 4.8.2014 1:50
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Filip Šohajek
Redaktor
Avatar
Odpovídá na Matúš Petrofčík
Filip Šohajek:

Ano, sorry, včera na mobilu jsem funkčnost jen odhadoval. Napsal jsem ti nový .htaccess :

Options -Indexes

RewriteEngine on
RewriteBase /

RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} ^([a-z.]+)$ [NC]
RewriteRule ^(.*)$ http://www.%1/$1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php [L]

AddType application/x-httpd-php .php .phtml

Jak sis mohl všimnout, přepsal jsem RewriteCond a RewriteRule pro přidání www.
První RewriteCond se splní, pokud na začátku URL není www.
Další ověřuje, jestli je v URL nějaký text.
A poté jen přepíše vše, a to za použití parametrů, které získal v RewriteCondech.
Podmínka pro soubory funguje přesně tak, jak myslíš. Vezne se jméno požadovaného souboru, a zjistí se, jestli to není soubor (!-f) nebo složka (!-d) na serveru.
RewriteRule potom zjistí, jestli není přípona souboru mezi těmi, které nemá přepisovat a pokud ne, přepíše ji tak, aby se návštěvníkovi zobrazil index.php.
AddType přidá projetí PHP preprocesorem pro soubory typu php a phtml, před tím, než se zobrazí návštěvníkovi.
Knihu o apache žádnou neznám (leda v angličtině Apache Cookbook), ale po chvilce Googlování jsem narazil na http://knihy.cpress.cz/…erver-2.html

 
Nahoru Odpovědět  +1 4.8.2014 8:37
Avatar
Matúš Petrofčík
Šéfredaktor
Avatar
Nahoru Odpovědět 4.8.2014 22:02
obsah kocky = r^2 ... a preto vlak drnká
Avatar
David Hynek
Redaktor
Avatar
Odpovídá na Matúš Petrofčík
David Hynek:

Zdar... nainstaloval jsem si tuhle UNISERVER s za boha jsem tam nemohl zprovoznit .htaccess nakonec jsem zjistil, že na začátku musí být tohle:

Options FollowSymLinks

nevím, zda to upotřebíš, ale prý to potřebují některé servery, aby jim rewrite fungovalo...

Editováno 4.8.2014 22:07
Nahoru Odpovědět 4.8.2014 22:07
Čím víc vím, tím víc věcí nevím.
Avatar
Matúš Petrofčík
Šéfredaktor
Avatar
Odpovídá na David Hynek
Matúš Petrofčík:

mne to funguje aj bez toho, ale idem pogoogliť čo to vlastne je :D

Nahoru Odpovědět  +1 4.8.2014 22:22
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Filip Šohajek
Redaktor
Avatar
Odpovídá na Matúš Petrofčík
Filip Šohajek:

Je to nastavení, které říká serveru, že má následovat symbolické linky na soubory (a složky).

 
Nahoru Odpovědět 5.8.2014 9:49
Avatar
mkub
Redaktor
Avatar
Odpovídá na Matúš Petrofčík
mkub:

a aby ti to fungovalo, musis mat zavedeny mod_rewrite v konfiguracii Apache, inak ti ten .htaccess bude vyhadzovat chybu, ze nepozna danu direktivu pri nezavedenom module

direktiva RewriteEngine to iba zapina/vypina a je zavisla od zavedenia modulu mod_rewrite

 
Nahoru Odpovědět 7.8.2014 12:57
Avatar
Matúš Petrofčík
Šéfredaktor
Avatar
Odpovídá na mkub
Matúš Petrofčík:

toto som riešil tak pred rokom keď som si prvý raz nainštaloval WAMP, tam je to defaultne vypnuté (a aj posielanie súborov)

Nahoru Odpovědět 7.8.2014 13:09
obsah kocky = r^2 ... a preto vlak drnká
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 11 zpráv z 11.