Autor | Zpráva | ||
---|---|---|---|
147477 Profil |
#1 · Zasláno: 3. 3. 2013, 12:12:57
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 |
#2 · Zasláno: 3. 3. 2013, 12:28:11
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 |
#4 · Zasláno: 3. 3. 2013, 16:36:16
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 |
#6 · Zasláno: 3. 3. 2013, 16:56:18
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 |
#12 · Zasláno: 3. 3. 2013, 21:25:54
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 |
#14 · Zasláno: 4. 3. 2013, 14:47:15
Davex:
"jednoduché schéma..." ma fakt dostalo :DDDDD Idem si to preštudovať. |
||
Časová prodleva: 11 let
|
0