Autor Zpráva
147477
Profil
Zdravím,

potřeboval bych pomocí .htaccess a enginu mod_rewrite zamaskovat všechny podstránky s příponou .html za jednu stránku. V adresním řádku by pak byla pouze domena.cz a nikoliv kecy za lomítkem.

Jak by měl podle vás vypadat funkční kód?

Díky za rady.
Camo
Profil
147477:
RewriteRule \.html$ %{HTTP_HOST} [R=301,L]

???
147477
Profil
Error 404. :(

Stránka domena.cz/cokoliv.html se změní na prapodivný tvar http://domena.cz/www/domena.cz/domena.cz/domena.cz

Zapomněl jsem zdůraznit, že používám .htpasswd - asi to s tím bude souviset...

Ale díky za snahu!
Davex
Profil
147477:
Podle čeho má webserver poznat, kterou podstránku odeslat a jak se bude odkazovat na ostatní podstránky?
147477
Profil
Ne, mně jde jen o to skrýt v adresním řádku co je za lomítkem - nic víc, nic míň.

U index.html mi to fungovalo bez problémů, ale nevím, jak to explicitně nastavit pro všechny ostatní podstránky.
Davex
Profil
147477:
Ne, mně jde jen o to skrýt v adresním řádku co je za lomítkem
To, co se zobrazí v adresním řádku, je v kompetenci prohlížeče a nesouvisí to s nastavením serveru, který to ani nemůže ovlivnit. Na doméně se ti načítá soubor index.html, protože je na serveru nastaven jako výchozí dokument v adresáři.
147477
Profil
Tento funkční script po otevření adresy domena.cz/index.html text za lomítkem automaticky skryje, v adresním řádku zůstává domena.cz:

RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^/]+/)*index\.html\ HTTP/
RewriteRule ^(([^/]+/)*)index\.html$ http://domena.cz/$1 [R=301,L]

Potřebuji jej zobecnit tak, aby fungoval i pro jiné podstránky, např. index2.html. Bylo by to možné?
Davex
Profil
Pokud nechceš zobrazit obsah žádné jiné podstránky, tak to jde takto.

RewriteEngine On
RewriteRule \.html$ http://domena.cz/ [R=302,NS,L]
147477
Profil
Děkuji - jenom nechápu ty příznaky...

[R=302] - stačilo by jen [R], ne? Je vůbec nutné obecně uvádět přesměrování, nestačilo by podstrkávání?

[NS] - nemá být [NC]?

Nefunguje mi to - adresu sice skryje, ale vždycky načte domena.cz, tedy index.html. :(


Davex:
Pokud nechceš zobrazit obsah žádné jiné podstránky, tak to jde takto.
To není to, co nechci. :D

Rád bych zobrazil obsah každé podstránky, pouze ukryl (tj. zamaskoval) v adresním řádku její skutečnou adresu. V PHP brnkačka - proč v HTML tak složité?
Camo
Profil
Davex:
Môžem mať otázku?
Čo robí ten NS flag(z dokumentácie som to moc nepochopil)? Resp. prečo sa ten môj výraz tak zacyklil? Myslel som, že L musí stačiť...
Davex
Profil
147477:
[R=302] - stačilo by jen [R], ne?
Stačilo, ale číslo se lépe přepisuje na 301.

Nefunguje mi to... Rád bych zobrazil obsah každé podstránky, pouze ukryl (tj. zamaskoval) v adresním řádku její skutečnou adresu.
Proto jsem se ptal, na to, na co jsem se ptal [#4] a psal v [#6], že to nejde na serveru nastavit.

V PHP brnkačka
Ukaž, jak jsi schopen v PHP zamaskovat skutečnou adresu a na jedné adrese zobrazovat víc různých stránek.

proč v HTML tak složité?
Nastavení serveru nesouvisí s HTML.

Camo:
Čo robí ten NS flag
Nemusí tam být. Jsem ho tam zvyklý dávat kvůli optimalizaci poddotazů, aby se pravidlo interně neprovádělo po podstrkávacích pravidlech, která nepřepisují na konkrétní objekt. Příznakem L se totiž většinou nekončí a na přepsanou adresu se pravidla aplikují znova.

Pokud by se v adresách používaly parametry, tak by tam správně měl ještě být příznak NE, který zabrání dalšímu escapování již escapovaných parametrů.

Aby to tedy nikoho nemátlo, tak nové pravidlo (které je nejspíš stejně k ničemu):

RewriteEngine On
RewriteRule \.html$ http://%{HTTP_HOST}/ [R,NE,L]
Camo
Profil
Davex:
No a prečo sa zacyklil v tom prepisovaní? Nemôžem to pochopiť... Veď tam máš to isté čo ja, len si tú adresu zadal natvrdo(čo je z hľadiska univerzálnosti o ktorú usilujem nežiadúce).
To s tým L som tiež nepochopil. Ako to že sa aplikujú znova? Last snáď znamená last... Som z toho somár.

Ak máš ešte na to nervy, tak vopred ďakujem za odpoveď.
Davex
Profil
Camo:
Tady se to nezacyklí, protože cílová adresa nevyhovuje regulárnímu výrazu \.html$ a ty jsi neuvedl protokol http://.

L znamená, že je to poslední pravidlo v probíhajícím cyklu. Na vzniklé adrese se spustí nové vyhodnocování všech pravidel stále dokola, dokud dochází ke změnám. Jakmile se v posledním přepisu v adrese nic nezmění, tak se přepisování ukončí.

Tady je jednoduché schéma. Příznak L způsobí to, že u vyhovujícího pravidla je výsledkem rozhodnutí More rules? => No.
Camo
Profil
Davex:
"jednoduché schéma..." ma fakt dostalo :DDDDD
Idem si to preštudovať.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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