Klávesové zkratky na tomto webu - rozšířené Na obsah stránky

přežilo havárii klávesnice

Hádanka - znáte mod_rewrite?

Tak schválně. Dokážete vyřešit pomocí pravidel mod_rewrite v .htaccess následující úkol? A rozhodně nejde o nic vykonstruovaného, nýbrž o běžný požadavek, pro mod_rewrite jako šitý.

Cílem je přistupovat ke skriptům bez použití jejich skutečné přípony .php. Tedy místo http://example.com/contact.php se bude používat http://example.com/contact. Samozřejmě by bylo chybou, aby stejná stránka byla dosažitelná i na adrese contact.php – proto ještě přístupy ke stránkám *.php hlavičkou 301 přesměrujeme na verze bez přípon.

Je zadání jasné? Tak hodně štěstí :-)

Řešení je v tomto komentáři.

Karma body: 36. Líbil se vám článek?

Komentáře » přidat

  1. avatar [1] gwh: nový
    RewriteEngine On
    
    RewriteCond %{REQUEST_URI} !\.[[:alnum:]]+$
    RewriteRule ^(.+[^/])$ /$1 [R=301]
    RewriteRule ^([^/]+)/([[:alnum:]])+/$ %{DOCUMENT_ROOT}/$1.php [L,QSA]
    
    RewriteCond %{REQUEST_URI} \.php$
    RewriteRule ^(.+[^/])\.php$ /$1 [R=301]
    RewriteRule ^([^/]+)/([[:alnum:]])+\.php$ %{DOCUMENT_ROOT}/$1.php [L,QSA]

    Mno, tak nějak? Dost krutě jsem se do toho zamotal, koukám na to asi čtvrt hodiny. :-)

    Posláno 17. 8. 2006 v 8.32 | Odpovědět
    Na komentář reagoval [2] David Grudl
  2. avatar [2] David Grudl: nový

    [1] gwh: testoval jsi to?

    Ještě maličkost – pokud jsou tyto pravidla pro .htaccess, pak používáš špatné přesměrování – %{DOCUMENT_ROOT} je pouze cesta k případným problémům a vůbec ničemu nepomůže. Dále podmínka (.+[^/]) eliminuje jednopísmené názvy.

    (tím tě nechci kritizovat, ber to jako přátelské upozornění, jsem rád že jsi zkusil hádanku řešit ;)

    Posláno 17. 8. 2006 v 8.44 | Odpovědět
    Na komentář reagoval [3] gwh
  3. avatar [3] gwh: nový

    [2] David Grudl: Omlouvám se, nevšiml jsem si dodatku na konci článku – netestoval.

    Posláno 17. 8. 2006 v 8.45 | Odpovědět
  4. [4] bert: nový

    Pěkná kulišárna :-)

    Hraju si s tím už docela dlouho a zatím nic moc.

    Lehký pokrok byl při vypnutí mod_negotiation – když je zapnutý, tak se při requestu http://server/adresar/skript automaticky zavola skript.php, což dělá při rewrite docela zmatek (přepíše se „samo“ dříve než se dostaneme k rewritu).

    Zatím jsem dospěl k (nefunkčnímu) kódu:

    RewriteBase /adresar/s/testem
    
    RewriteCond %{ENV:RewritedPHP}            !^yes$
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME}\.php -f
    RewriteRule ^(.*)$ $1.php [L,E=RewritedPHP:yes]
    
    RewriteCond %{ENV:RewritedPHP}            !^yes$
    RewriteCond %{REQUEST_FILENAME} -s
    RewriteCond %{REQUEST_FILENAME} ^(.*)\.php$
    RewriteRule ^(.*)\.php$ $1 [R=301,L]

    Který nejede protože se (nevím ještě proč) nevyhodnocuje správně ta ENV proměnná.

    Ale třeba to někoho nakopne dál…

    Posláno 17. 8. 2006 v 9.14 | Odpovědět
  5. [5] GgzeE: nový

    Vidím v tom veliký problém, první část úkolu se dá vyřešit jednoduše, háček je ovšem v té druhé části, kde je požadováno, aby skripty s .php byli přesměrovány na ty bez přípony. To povede k zacyklení, tedy alespoň se znalostmi, které mám, mi to tak přijde. Třeba existuje nějaká klauzule, která tomu dokáže zabránit.

    Trefil jsem podstatu problému?

    Posláno 17. 8. 2006 v 9.17 | Odpovědět
    Na komentář reagoval [6] bert
  6. [6] bert: nový

    [5] GgzeE: ano, právě proto tam šaškuju s tím ENV

    Posláno 17. 8. 2006 v 9.23 | Odpovědět
    Na komentář reagoval [7] GgzeE
    Na komentář reagoval [9] GgzeE
    Na komentář reagoval [20] David Grudl
  7. [7] GgzeE: nový

    [6] bert: Jj, koukal jsem na to, až po odeslání mýho komentáře, o tomhle jsem neměl vůbec ponětí :-D To je ta „magická“ klauzule, která mi chybí ve znalostech… Krom mnoho dalších :-D :-D

    Posláno 17. 8. 2006 v 9.25 | Odpovědět
  8. [8] mrzout: nový

    Doufam, ze jsem za tebe neresil tvoji zakazku :)) Protoze jinak poslu fakturu :))

    RewriteEngine On
    RewriteCond  %{REQUEST_FILENAME}  \.php$
    RewriteRule  ^/(.*)\.php?(.*)$ /$1 [L,R=301,E=QUERY_STRING:$2]
    
    RewriteCond  %{DOCUMENT_ROOT}%{REQUEST_FILENAME}\.php -f
    RewriteRule  ^/([^?]*)?(.*)$  %{DOCUMENT_ROOT}/$1\.php [L,E=QUERY_STRING:$2]
    Posláno 17. 8. 2006 v 9.28 | Odpovědět
    Na komentář reagoval [10] GgzeE
    Na komentář reagoval [13] David Grudl
    Na komentář reagoval [15] mrzout
  9. [9] GgzeE: nový

    [6] bert: Když tak koukám na tvůj příklad, tak mě napadá: Nenastaví se náhodou ta proměná na yes už na stálo? Nebo při dalším spuštění .htaccess se smaže? Jde o to, že pokud se jednou nastaví, tak ten tvůj zápis už neřeší její „odnastavení“, aby mohly probíhat další požadavky, ne?

    Posláno 17. 8. 2006 v 9.30 | Odpovědět
    Na komentář reagoval [12] bert
  10. [10] GgzeE: nový

    [8] mrzout: Možná je to podstata tvého řešení, ale proč tam máš: E=QU­ERY_STRING:$2? Nestačilo by použití QSA? A hlavně myslím, že zápis: ^/(.)\.php?(.)$ je chybný! Ten otazník tam nemá co dělat, nebo se mýlím?

    Posláno 17. 8. 2006 v 9.35 | Odpovědět
  11. avatar [11] David Grudl: nový

    zatím do toho nebudu vstupovat, jen bych poprosil, formulujte prosím příkazy pro .htaccess, nikoliv httpd.conf. Ať to máme jednotné.

    Posláno 17. 8. 2006 v 9.35 | Odpovědět
    Na komentář reagoval [12] bert
  12. [12] bert: nový

    [9] GgzeE: No mám spíš problém že se nenastaví vůbec, nebo se to respektive nijak neprojeví :(

    [11] David Grudl: ano dělám to pro .htaccess

    Posláno 17. 8. 2006 v 9.39 | Odpovědět
  13. avatar [13] David Grudl: nový

    [8] mrzout: jak tak koukám, mohl bych ti fakturovat školení mod_rewrite :-) Pouze první řádek neobsahuje hrubou chybu :-)

    Posláno 17. 8. 2006 v 9.42 | Odpovědět
    Na komentář reagoval [15] mrzout
  14. [14] GgzeE: nový

    Tak jsem si to taky zkusil, ale je tady přesně ten problém se zacyklením, který nevím jak vyřešit, chtělo by to nějak sdělit serveru, že při použití prvního pravidla, už chci čistý soubor a nechci to prohánět dalším .htaccessem:

    RewriteEngine On
    RewriteBase /modRewrite/
    
    RewriteCond %{REQUEST_URI} !\.php$
    RewriteRule ^(.+)$ $1.php [L]
    
    RewriteCond %{REQUEST_FILENAME} \.php$
    RewriteRule ^(.+)\.php$ $1 [R=301]
    Posláno 17. 8. 2006 v 9.52 | Odpovědět
  15. [15] mrzout: nový

    [8] mrzout: Ten otaznik je tam prave kvuli zbolenemu zpusobu predani parametru. Pockame si na elegentantni reseni od dgx, co rikas? ;-)
    [13] David Grudl: :-))) Diky za nabidku, ale me by se to nevyplatilo.
    Mod_rewrite pouzivam jedno jedine pravidlo presmerovavajici cely web na Controller a dal do nej nikdy nehrabu.

    Nicmene tohle reseni jsem otestoval a funguje (v ramci httpd.conf, odlisnosti pro .htaccess neznam). Hruba chyba predpokladam sebou nese nejakou ztratu (rychlost, informace, nefunkcnost). Muzes ji upresnit?

    Posláno 17. 8. 2006 v 9.56 | Odpovědět
    Na komentář reagoval [17] David Grudl
  16. [16] GgzeE: nový

    Tohle by to mohlo být, ale nefunguje :-( Nedokážu si to přesně přeložit…

    ‚nosubreq|NS‘ ( not for internal sub-requests)
    This flag forces the rewrite engine to skip a rewrite rule if the current request is an internal sub-request. For instance, sub-requests occur internally in Apache when mod_include tries to find out information about possible directory default files (index.xxx). On sub-requests it is not always useful, and can even cause errors, if the complete set of rules are applied. Use this flag to exclude some rules.
    To decide whether or not to use this rule: if you prefix URLs with CGI-scripts, to force them to be processed by the CGI-script, it's likely that you will run into problems (or significant overhead) on sub-requests. In these cases, use this flag.

    Posláno 17. 8. 2006 v 9.56 | Odpovědět
  17. avatar [17] David Grudl: nový

    [15] mrzout: jasně, upřesním:

    1. řádek – ten je ok, perfektní práce :-)
    2. řádek – používáš REQUEST_FILENAME, které v té době „není známé“, resp požadavek je v REQUEST_URI
    3. řádek – víš, že do výrazu v RewriteRule nejde query string? Dále otazník má spec. význam.
    4. řádek – kombinace DOCUMENT_ROOT+RE­QUEST_FILENAME je nesmysl.
    5. řádek – viz předchozí

    Nemůže to fungovat ani náhodou.

    Posláno 17. 8. 2006 v 10.07 | Odpovědět
    Na komentář reagoval [21] mrzout
    Na komentář reagoval [24] David Grudl
  18. [18] GgzeE: nový

    Nalezl jsem jednoduché řešení, které se skrývá v tom, že php soubory ukryji v adresáři skripty a v souboru .htaccess bude toto:

    RewriteEngine On
    RewriteBase /modRewrite/
    
    RewriteCond %{REQUEST_URI} !\.php$
    RewriteRule ^(.+)$ skripty/$1.php [L]
    
    RewriteCond %{REQUEST_FILENAME} \.php$
    RewriteRule ^(.+)skripty/(.+)\.php$ $2 [R=301]
    RewriteRule ^(.+)!skripty/(.+)\.php$ $1 [R=301]
    Posláno 17. 8. 2006 v 10.52 | Odpovědět
    Na komentář reagoval [20] David Grudl
  19. [19] jA: nový

    aj takto by to mohlo ísť spraviť:

    RewriteEngine On
    
    # if it is an interal redirect
    RewriteCond %{ENV:REDIRECT_STATUS} !^$
    # do nothing
    RewriteRule .* - [L]
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ $1\.php [L]
    
    RewriteCond %{REQUEST_FILENAME} \.php$
    RewriteRule ^(.+)\.php$ $1 [R=301]
    Posláno 17. 8. 2006 v 10.55 | Odpovědět
    Na komentář reagoval [20] David Grudl
  20. avatar [20] David Grudl: nový

    [19] jA: Výborně! Jsi vítěz.

    Ještě bych to doplnil o detekci existence souboru před redirektem a také můžeme ušetřit jedno pravidlo:

    RewriteEngine On
    RewriteBase /
    
    # exists file with extension?
    RewriteCond %{REQUEST_FILENAME}.php -f
    RewriteRule ^.*$ $0.php [L]
    
    # redirect, but only once
    RewriteCond %{ENV:REDIRECT_STATUS} ^$
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule ^(.+)\.php$ $1 [L,R=301,NE]

    Nicméně i způsob [18] GgzeE: je správný. Pokud chci web zbavit přípon a zachovat přesměrování z původních souborů, volil bych právě tuto variantu, tedy přesunutí všech souborů do jiné složky. A nejlépe mimo document_root.


    Proč byl tento úkol složitější, než se zdál? Apache po zpracování pravidel provede Internal Redirect, kterému není možné zabránit pomocí [NS], ani jej detekovat přes %{IS_SUBREQ}. Ba co víc, po tomto redirektu se ztratí prostředí, na což narazil [6] bert:. Problém šlo vyřešit pomocí:

    • přesunu souborů do jiné složky [18] GgzeE:
    • detekce %{ENV:REDIREC­T_STATUS} [19] jA:
    • detekce přes proměnnou v QUERY_STRING
    • analýzy původního requestu v %{THE_REQUEST}

    Jiný způsob mě nenapadá. Je ale vidět, že mod_rewrite není žádná sranda :-)

    Používejte důsledně u každého R=301 i NE! Zkuste, co to udělá s takovým skript?param=%2A – přesměruje na skript?param=%252A a to je zrada

    Posláno 17. 8. 2006 ve 12.11 | Odpovědět
    Na komentář reagoval [32] jarinek
    Na komentář reagoval [38] spaze
    Na komentář reagoval [39] kelvin
    Na komentář reagoval [42] Berny
  21. [21] mrzout: nový

    [17] David Grudl: Tak ted si me pobavil.

    Perfektni rozbor s jednoznacnym zaverem, ktery ma jednu malou chybicku – je v rozporu s realitou :)

    Netvrdim ze moje reseni je cista prace nebo nejak elegantni. Dokonce jsem ochoten verit, ze obsahuje chybu. Ale chci videt konkretni URL, ktere nezafunguje, pripadne vysvetleni, proc to co se provedlo neodpovida zadani.

    Protoze prepisy se evidentne provadi a zadna teorie na tom nic nezmeni.

    Posilam ti na mejl adresu, kde si to muzes vyzkouset + konfiguraci daneho vhosta, ktery obsahuje citovany mod_rewrite.

    Posláno 17. 8. 2006 ve 13.21 | Odpovědět
    Na komentář reagoval [22] mrzout
    Na komentář reagoval [24] David Grudl
  22. [22] mrzout: nový

    [21] mrzout: prvni chybu vidim uz sam:

    Chybi tam NE a neporadi si to s parametrem param=%2A

    Posláno 17. 8. 2006 ve 13.39 | Odpovědět
  23. [23] Filda: nový

    Pokud ti jde jenom o schování přípon tak to řeší v dokumentaci php

    Posláno 17. 8. 2006 ve 13.42 | Odpovědět
  24. avatar [24] David Grudl: nový

    [21] mrzout: zázraky se dějí :-)

    Protože je tvůj postup určen pro httpd.conf a nikoliv .htaccess, odvolávám bod č. 4 (viz [17] David Grudl:) a naopak použití proměnných je správné. Vše ostatní ale platí – regulární výrazy obsahují chyby, řádek č. 2 je zbytečný, query string se předává zcela jinak (a protože se předává sám, tak se zdá, že to funguje). Ty chyby jsou prostě v takové úžasné harmonii, že to vytváří dojem fungujícího mechanismu. Dokonce to zpracuje i test.php.php.php :-)

    Posláno 17. 8. 2006 ve 14.11 | Odpovědět
    Na komentář reagoval [25] mrzout
  25. [25] mrzout: nový

    [24] David Grudl: tak v tom se poznavam :)

    Mas pravdu, dival jsem se do logu rewritu a QUERY_STRING se nastavoval na prazdnou hodnotu.

    A kdyz zaslashuju otazniky (coz mi pri psani opravdu nedoslo), tak to prestane fungovat.

    Posláno 17. 8. 2006 ve 14.24 | Odpovědět
    Na komentář reagoval [28] David Grudl
  26. avatar [26] pete: nový

    ` RewriteEngine On
    RewriteBase /

    RewriteCond %{REQUEST_FILENAME} !\.php$
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.+)$ $1\.php [L]

    RewriteCond %{REQUEST_FILENAME} \.php$
    RewriteCond %{ENV:REDIREC­T_STATUS} ^$
    RewriteRule ^(.*)\.php$ $1 [R=301,L]

    `

    na jsem zkusil jít trošku jinak: mrknout jestli požadevek končí nebo nekončí „.php“ (+ neexistuje ten soubor?). obě pravidla fungujou samostatně, ale pokud je dám k sobě (nazáleží na pořadí) výsledkem je v nekonečná smyčka (bez poslední podmínky env…).

    „to muselo dát práce a přitom je to taková blbost“ :-)

    Posláno 17. 8. 2006 v 15.33 | Odpovědět
  27. avatar [27] ObiSkyWalker: nový

    Přesně tento problém jsem nedávno řešil, ale protože mi nešlo vyřešit přesměrování z .php na název bez přípony, tak jsem toho nechal.

    dgx: Bylo by možné, abych toto řešení použil na svých stránkách? Předem díky za odpověď.

    Posláno 17. 8. 2006 v 16.32 | Odpovědět
    Na komentář reagoval [28] David Grudl
  28. avatar [28] David Grudl: nový

    [25] mrzout:

    A kdyz zaslashuju otazniky (coz mi pri psani opravdu nedoslo), tak to prestane fungovat.

    ano, protože narušíš tu symbiózu chyb :-) ale nechme toho :-)

    [27] ObiSkyWalker: řešení klidně použij, proto tu je. Ale stejně bych doporučil metodu přesunutí do jiného adresáře. Vyhneš se tak dalším možným problémům.

    Posláno 17. 8. 2006 ve 20.09 | Odpovědět
  29. [29] pETR: nový

    No zadání vypadá jednoduché, ale chyba lávky ;) Proto bch změnil zadání na zakončení lomítkem a je to :)

    Posláno 17. 8. 2006 ve 23.07 | Odpovědět
  30. avatar [30] ObiSkyWalker: nový

    dgx: Díky moc :-).

    Posláno 17. 8. 2006 ve 23.52 | Odpovědět
  31. [31] piler: nový

    A nemala by ta url podľa správnosti končiť lomítkom? V tomto nemám veľmi jasno, ale niekde som čítal, že by to tak malo byť.

    Posláno 18. 8. 2006 ve 13.44 | Odpovědět
  32. [32] jarinek: nový

    [20] David Grudl: mno, nejsem znalec mod_rewrite ale podle mě tam máš asi někde malou chybičku. zkousel jsem ten kód a děje se toto:
    content.php >> /content
    tedy http://ejhle.cz/content.php >> http://ejhle.cz//content

    • jen upozornění na asi možná malou chybičku…
    Posláno 18. 8. 2006 v 19.18 | Odpovědět
  33. avatar [33] Lewig: nový

    Podle me je to uplne primitivni.
    PHP script ulozime jako index.php a vlozime ho do slozky ktera se da povazovat jako nazev .o)

    Priklad:
    http://server.neco/…_obrazek.jpg (ve skutecnosti to ale muze byt http://server.neco/…pg/index.php (jakoze_obrazek.jpg je adresar).

    Posláno 22. 8. 2006 v 1.02 | Odpovědět
    Na komentář reagoval [34] Onecar
  34. avatar [34] Onecar: nový

    [33] Lewig: Přesně tak, tohle poslední dobou vidím na mnoha webech (http://něco.cz/ho­me ) a vždycky mně napadá to řešit „prasácky“ tak, že budu mít na rootu složku /home/ a v ní index.php :)

    Posláno 27. 8. 2006 ve 12.42 | Odpovědět
  35. avatar [35] Ondra: nový

    Hmm, vidim ze uz bych se to mnel taky naucit. Jen co si zaplatim hosting, anzto jsem nikde na freehostingach nevidel mod_rewrite. Ondra

    Posláno 31. 8. 2006 v 16.25 | Odpovědět
    Na komentář reagoval [36] Kevujin
  36. [36] Kevujin: nový

    [35] Ondra:

    …Hmm, vidim ze uz bych se to mnel taky naucit. Jen co si zaplatim hosting, anzto jsem nikde na freehostingach nevidel mod_rewrite. Ondra

    Z tebe budou mít teda asi nekonečnou radost, až jim to tam budeš cyklit.

    Posláno 25. 9. 2006 ve 13.43 | Odpovědět
  37. avatar [37] ondra: nový

    cau. zkousel jsem to:
    RewriteEngine On
    RewriteBase /

    # exists file with extension?
    RewriteCond %{REQUEST_FILE­NAME}.php -f
    RewriteRule ^.*$ $0.php [L]

    # redirect, but only once
    RewriteCond %{ENV:REDIREC­T_STATUS} ^$
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule ^(.+)\.php$ $1 [L,R=301,NE]

    Funguje to dobre, ale nevim proc, nepredavaj se mi ted parametry z formulare.

    Posláno 25. 10. 2006 v 17.00 | Odpovědět
  38. [38] spaze: nový

    DGX,
    mohl bys prosím nahoru do článku rovnou linknout to správný řešení [20] David Grudl:, aby to bylo líp k nalezení, když to někde někomu posílám?
    Díky

    Posláno 2. 11. 2006 v 18.08 | Odpovědět
  39. avatar [39] kelvin: nový

    [20] David Grudl: Takže fajn, tohle je pořešené, ale co když budu mít na webu jeden adresář (administrační systém), u kterého chci aby se ho toto pravidlo netýkalo?
    Co musím dopsat do toho .htaccess ? je to pro mě mírně španělská vesnice, díky za případnou radu.

    Posláno 9. 11. 2006 v 18.10 | Odpovědět
  40. [40] Kajman: nový

    Musí se to ještě testovat, zda klient neposílá data přes POST a v tom případě nepřesměrovávat, jinak se data z formuláře ztratí. Tzn. přidat k redirectu ještě podmínu
    RewriteCond %{REQUEST_MET­HOD} GET

    Posláno 15. 11. 2006 v 11.10 | Odpovědět
  41. avatar [41] ondra: nový

    diky Kajman diky moc. Huš to frčí jak má. A pro ty co se s tim jeste perou, tak to sem radeji napisu:

    RewriteEngine On
    RewriteBase /
    # exists file with extension?

    RewriteCond %{REQUEST_FILE­NAME}.php -f
    RewriteRule ^.*$ $0.php [L]
    RewriteCond %{REQUEST_MET­HOD} GET

    # redirect, but only once
    RewriteCond %{ENV:REDIREC­T_STATUS} ^$
    RewriteCond %{REQUEST_FILE­NAME} -f

    RewriteRule ^(.+)\.php$ $1 [L,R=301,NE]

    Posláno 28. 11. 2006 ve 23.33 | Odpovědět
  42. avatar [42] Berny: nový

    Zdravím,
    mám problém a pro mě poměrně zásadní. Když si chci výsledné řešení [20] David Grudl: vyzkoušet na localhostu, tak se mi cyklí. Na internetu jede vše bez problému.

    Problém bude nejspíš v proměnné %{ENV:REDIREC­T_STATUS}, která je vždy na localhostu prázdná.

    Nevíte někdo proč se tak děje a případně jak tenhle problém odstranit?

    Posláno 19. 6. 2007 ve 20.00 | Odpovědět
  43. avatar [43] Kuba: nový

    Pěkný den, koukám, že jsou tu převážně lidi, co se v tom vyznaj, tak bych se chtěl zeptat na následující:

    Jak by měl vypadut kód pro doplnění lomítka na konci v případě, že v adresním řádku píšu adresář bez souboru

    tedy
    http://www.neco.cz/ulice
    změní na
    http://www.neco.cz/ulice/

    Dík předem za radu.

    Kuba

    Posláno 16. 1. 2008 ve 12.16 | Odpovědět
  44. [44] S@p: nový

    Ahoj,
    zkoušel jsem kód, který je tu uveden jako řešení.

    když mám soubor http://www.example.com/neco.php a zadám http://www.example.com/neco/ hodí mi to chybu 500.

    To by asi nemělo. :)

    Posláno 27. 1. 2008 v 11.42 | Odpovědět
  45. [45] S@p: nový

    Koukám teď na stránky přispívajících přede mnou.
    Takže chyba v praxi:

    http://www.web-levne.com/kontakt/
    http://www.milichovsky.com/kontakt/

    Posláno 27. 1. 2008 ve 13.18 | Odpovědět
  46. [46] S@p: nový

    Já jsem zplodil toto:

    #
    RewriteEngine on
    RewriteRule ^([^.]+)$ $1.php [QSA,L]
    RewriteBase /
    RewriteCond %{ENV:REDIREC­T_STATUS} ^$
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule ^(.+).php$ $1 [L,R=301,NE]
    #

    /neco.php > /neco
    /neco/ > 404

    Zdá se mi to lepší, než řešení v dvacátém komentáři, které hází chybu 500. Ale možná má ten můj kód nějakou mouchu, na kterou jsem nepřišel.

    Posláno 27. 1. 2008 ve 21.35 | Odpovědět

Tento článek byl uzavřen. Už není možné k němu přidávat komentáře ani hlasovat

Výtah na začátek článku na první komentář

Názory čtenářů v diskusích nejsou názory provozovatele webu, a ten za jejich obsah neodpovídá.

La Trine © 2004, 2008 David Grudl – o webu
provozuje Pachollini.

Jakékoliv užití obsahu, včetně převzetí článků nebo jejich částí, je bez předchozího písemného svolení autora zakázáno.

Ukázky zdrojových kódů smíte používat s uvedením autora a URL tohoto webu bez dalších omezení.