Autor Zpráva
filio
Profil *
Ahoj mohl by mi někdo prosím poradit. Potřeboval bych podstrčit stránku:
www.neco.cz/strana/ukaz/14
na místo
www.neco.cz/kontakt/

Zkoušel jsem

RewriteEngine On
RewriteBase /
RewriteRule ^kontakt/$ /strana/ukaz/14 [L]


pokud přímo spustím www.neco.cz/strana/ukaz/14
tak se stránka zobrazí správně,

pokud ale spustím www.neco.cz/kontakt/
tak to vyhodí chybu 404 kterou generuje codeigniter ne tu klasickou defaultní 404,

*.htaccess je povolen, pokud zkusím přesměrování, podstrčení na jinou adresu tak je vše OK.
* četl jsem různé návody, nevím si s tím rady

Nevíte někdo prosím Vás, čím by to mohlo být?
meris
Profil
Ahoj,
podle mého máš rewrite správně, ale codeigniter nerozpozná co má na základě tohot url provést za akci, mrkl bych se sem.
Otázka je co ti to hlási za chybu přesně.
filio
Profil *
Tak chyba byla v tom, že
RewriteRule ^kontakt/$ /strana/ukaz/14 [L]
to podstrčí za soubor z místní adresy, který musí fyzicky existovat na disku. Tedy to vlastně podstrkávalo soubor index.php, který sice načetl codeigniter, ale neuměl si poradit s proměnnými v URL a hlásil chybu 404 definovanou v codeigniteru. Na místo chyby 404 definované hostingem.

Jestli jsem to dobře pochopil tak teoreticky by to šlo, pokud by šlo podstrčit absolutní adresu to, ale nelze. Absolutní adresu lze použít pouze u přesměrování.

Ahoj, 
podle mého máš rewrite správně, ale codeigniter nerozpozná co má na základě tohot url provést za akci, mrkl bych se sem. 
Otázka je co ti to hlási za chybu přesně.


Ahoj máš pravdu. Na tento návod jsem koukal, ale nějak mi to nedocvaklo. Až po třech lahváčích :-) bohužel tvoji reakci jsem si přečetl až po docvaknutí, ale i tak mockrát díky.

Jak tak na to koukám tak by se mohlo zdát, že pokud v souboru:config/routes.php přidáme řádek:
$route['zkouska'] = "test/ukaz/34";


a pak v prohlížeči spustíme www.neco.cz/zkouska

a v soubor:controllers/test.php bude mít:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class test extends CI_Controller {
  

      public function ukaz()
	{
$this->load->helper(array('url'));
echo "".$this->uri->segment(1).",".$this->uri->segment(2).",".$this->uri->segment(3)."";  
}


Tak se nám vypíše: 'test,ukaz,34', ale na místo toho se vypíše pouze 'test'. 2. a 3. segment URL se nevypíše, ale funkce 'ukaz' se zavolá (důkazem je vypsání právě tohoto řetězce).

Proto, pokud chcete volat funkce tak například funkci ukaz v třídě test lze zavolat pouze www.neco.cz/zkouska
$route['zkouska'] = "test/ukaz";


Pokud však chceme například předávat i ID tak to musíme zapsat takto
$route['zkouska/(:num)'] = "test/ukaz/$1";


naše funkce by poté vypsala: 'zkouska,34,' to dokazuje, že se přeneslo ID.


*Připomínám, že musíte mít nastavený funkční mod rewrite (více zde)
*Snad to třeba někdy někomu pomůže, když už já jsem nad tím strávil skoro celou noc...
*Netvrdím, že mám absolutní pravdu a že to třeba nelze udělat nějak jednodušeji...

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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

0