Autor Zpráva
ctverecek
Profil
Zdravim, mam tento kód:

     <div id="levypanel">     
       <ul id="menu"> 
            <li><a href="uvod.html">Uvod</a></li>
            <li><a href="board.html">BOARD</a></li>
            <li><a href="reference.html">REFERENCE</a></li>    
       </ul> 
     </div>
              
     <div id="hlavnipanel"> 
         <?
              if(!isset($_GET['id']))
                $_GET['id']=uvod;
              switch ($_GET['id']){
                case 'uvod': require "./includes/uvod.php";
                  break;
                case 'board': require "./includes/board.php";
                  break;
                case 'reference': require "./includes/reference.php";
                  break;  
                default : require "./includes/uvod.php";
                  break;}                              
         ?>                   
      </div>


Po uploadu na server mi pak ale nefunguje...pokaždé mi to vyhodí hlášku ze stranka neexistuje :-(. MOD REWRITE mam nastaven takto:

ErrorDocument 404 /chybovka.html
RewriteEngine on
RewriteBase /
RewriteRule ^web/(.*)\.html$ index.php?id=$1 [L]


Mam takove tuseni jestli se nemusi do pravidla rewritu pripsat nova slozka, jelikoz vyse zminene stranky jsou v ROOT/web/administrator. Ale pravidlo RewriteRule ^web/admistrator(.*)\.html$ index.php?id=$1 [L][ nefunguje
AM_
Profil
Záleží, kde je ten index.php; jestli ve web, pak máš nejlepší celý .htaccess přesunout do složky web a neřešit tam relativní cesty. Jestli v rootu, nevím, proč to nefunguje.
ctverecek
Profil
Bohužel muj hosting mi neumoznuje umistit .htaccess jinam nez do ROOT.



zkusil jsem

RewriteEngine on
RewriteBase /
RewriteRule ^web/(.*)\.html$ index.php?id=$1 [L]
RewriteRule ^web/administrator/(.*)\.html$ index.php?id=$1 [L]


a taky nic uz vazne nevim kde je chyba
ninja
Profil
RewriteRule ^web/(.*)\.html$ /web/administrator/index.php?id=$1 [L]


Ten index.php snad mate v adresari, ne?
ctverecek
Profil
RewriteEngine on
RewriteBase /
RewriteRule ^web/(.*)\.html$ index.php?id=$1 [L]
RewriteRule ^web/(.*)\.html$ /web/administrator/index.php?id=$1 [L]

nefunguje
ctverecek
Profil
Tak uz vim kde je chyba...potrebuju jen spojit tyto dvě rewrite pravdila:
ErrorDocument 404 /chybovka.html
RewriteEngine on
RewriteBase /
RewriteRule ^web/(.*)\.html$ index.php?id=$1
RewriteRule ^web/(.*)\.html$ admin.php?idcko=$1 [L]


jestli tedy nejaka logicka spojka existuje, zkousel jsem [OR] a to nejde?
joe
Profil
ctverecek
Zkusil bych to takhle.
RewriteRule ^web/(.*)\.html$ admin.php?idcko=$1 [L]
RewriteRule ^web/administrator/(.*)\.html$ admin.php?idcko=$1 [L]
ctverecek
Profil
Nakonec jsem dal admin.php taky do ROOT takze FTP struktura vypada takhle:



joe tvůj zapis taky nefunguje :-(

funguje vzdy to prvni pravidlo...potreboval bych se nejak jen spojit
AM_
Profil
ne, nepotřebuješ je spojit, stačí je otočit, protože první pravidlo odpovídá mimo jiné stejné možině adres, jako to druhé. jako bys napsal (if $a>0 then .... elseif $a == 5 ... endif) tak se taky ke druhé větvi nikdy nedostaneš.

Divil bych se, kdyby ti hosting nepovoloval .htaccess v jiných adresářích. Jak se to projevuje? když ho tam nahraješ, tak zmizí? musíš si nastavit zobrazení skrytých FTP souborů ;)
ctverecek
Profil
ne, nepotřebuješ je spojit, stačí je otočit, protože první pravidlo odpovídá mimo jiné stejné možině adres, jako to druhé. jako bys napsal (if $a>0 then .... elseif $a == 5 ... endif) tak se taky ke druhé větvi nikdy nedostaneš.
Divil bych se, kdyby ti hosting nepovoloval .htaccess v jiných adresářích. Jak se to projevuje? když ho tam nahraješ, tak zmizí? musíš si nastavit zobrazení skrytých FTP souborů ;)

Když jsem je takto otočil:
RewriteEngine on
RewriteBase /
RewriteRule ^web/(.*)\.html$ admin.php?idcko=$1 [L] 
RewriteRule ^web/(.*)\.html$ index.php?id=$1 [L]

Tak to funguje jen na admin.php do index.php se šoupají věci z adminu. Koukni sem a pak sem a pochopis jak to zlobí

.htaccess si mohu editovat jen prez webove rozhrani meho hostingu a pokud .htaccess vytvorim nove a nahraju ho do nejake slozky tak:Internal Server Error
AM_
Profil
Aha, myslel jsem otočit joeovo řešení -
RewriteRule ^web/administrator/(.*)\.html$ web/admin.php?idcko=$1 [L]
RewriteRule ^web/(.*)\.html$ web/index.php?idcko=$1 [L]

vždyť se na to, cos teďka napsal, podívej: máš tam dvě úplně stejné podmínky, jak se má apache rozhodnout, kterou použít?

/edit: joe tam měl taky chybku, samozřejmě ke druhému pravidlu patří index.php.
ctverecek
Profil
OK nakonec jsem to tedy udělal podle JOE a AM_ funguje to takže díky ;-)! Jestli jsem to však správně pochopil tak nemůžu nastavit dvě pravidla, pro dva soubory v jedné složce?
joe
Profil
A jo, já to kopíroval jen z jednoho řádku. A administrator musí byt před tím, protože jinak by to pravidlo přesměrovalo na index a nic dalšího by se neprovádělo, takže jak napsal AM_.

ctverecek
Jestli jsem to však správně pochopil tak nemůžu nastavit dvě pravidla, pro dva soubory v jedné složce?
Můžeš :-) Ale musí to být správně. Můžeš například napsat
RewriteRule ^web/([a-zA-Z])\.html$ web/index.php?nazev=$1 [L]
RewriteRule ^web/([0-9])\.html$ web/index.php?idcko=$1 [L]

Je to jen příklad. Obě přesměrují na index.php. To první do parametru nazev v url přídá název stránky pokud bude v url například xyz.html a to druhé přidá parametr idcko, když bude v url třeba 123.html
AM_
Profil
ctverecek
Jestli jsem to však správně pochopil tak nemůžu nastavit dvě pravidla, pro dva soubory v jedné složce?

Především jsi se dopustil základní chyby proti principu algoritmů - tvůj algoritmus nesplňoval jednoznačnost, nejen stroj, ale ani člověk neměl z tvého zápisu šanci zjistit, v jakém případě se má přesměrovat na index.php a v jakém na admin.php. Pokud jsi si myslel, že by to šlo na obojí najednou, tak prostě nejde. Principielně jde tedy o to, že už v .htaccess musíš rozlišit, co se má směrovat.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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