Mod_rewrite - problémy, výraz, nezobrazenie grafiky – Webové servery (Apache, IIS...), .htaccess – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Mod_rewrite - problémy, výraz, nezobrazenie grafiky – Webové servery (Apache, IIS...), .htaccess – Fórum – Programujte.comMod_rewrite - problémy, výraz, nezobrazenie grafiky – Webové servery (Apache, IIS...), .htaccess – Fórum – Programujte.com

 

Tocimanko0
Grafoman
15. 8. 2008   #1
-
0
-

Ahoj.

Mám problém. Predom upozorňujem, že som sa snažil preštudovať veľké množstvo dokumentácií a návodov, no nič som nevymyslel. Súbor htaccess:



RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^sortiment/(.*)/?$ index.php?pg=sortiment&kategoria=$1 [QSA,L]
RewriteRule ^(.*)/?$ index.php?pg=$1 [QSA,L]


O čo mi ide? Ak bude zadaná url v tvare '/sortiment/xyz' s / na konci alebo bez neho, prevedie to na ?pg=sortiment&kategoria=xyz . Lenže mi to nefunguje, resp. je to napokon bez grafiky a niektoré stránky mi jednoducho píšu #404ku :( Neviete poradiť, čo mám zle prípadne ako to upraviť? A navyše, keď sa dostanem na link /sortiment/xyz, tak potom všetky ostatné odkazy vedú na /sortiment/xyz/uvod (v prípade, že je to odkaz, ktorý odkazuje na 'uvod'.

V inom prípade (ak nie je URL v tvare /sortiment/...), chcem aby to previedlo len ?pg=... bez &kategoria=...

Som z toho na nervy. Ďakujem za každú odpoveď.

Nahlásit jako SPAM
IP: 195.91.84.–
Tocimanko0
Grafoman
15. 8. 2008   #2
-
0
-

To mi vážne nikto nevie pomôcť? :( Uvažujem, že to nechám cez klasické škaredé GET parametre :((

Nahlásit jako SPAM
IP: 195.91.84.–
bukaj0
Věrný člen
15. 8. 2008   #3
-
0
-

Tocimanko
> Lenže mi to nefunguje, resp. je to napokon bez grafiky

To bude kvůli tomu, že asi blbě odkazuješ na styly. Při vytváření „hezkých URL“, které vypadají jako složky na ně musíš odkazovat absolutně. Řekněme tedy, že pokud máš v rootu webu soubor style.css, nebudeš psát href="style.css", ale href="/style.css". Prostě musíš používat absolutní cestu, protože jinak pokud chceš kupř. /sortiment/xyz, prohlížeč se pak kouká po stylech na adrese /sortiment/xyz/style.css a ne /style.css. Další možností je použití tagu <base>, viz Google.

> a niektoré stránky mi jednoducho píšu #404ku

Těžko říct, čím by to mohlo být – pravidla se mi zdají dobře.

> A navyše, keď sa dostanem na link /sortiment/xyz, tak potom všetky ostatné odkazy vedú na /sortiment/xyz/uvod (v prípade, že je to odkaz, ktorý odkazuje na 'uvod'.

To samé jako s těmi styly.

Nahlásit jako SPAM
IP: 85.70.13.–
Jak se správně ptát? -> http://www.hash.cz/inferno/otazky.html[br][br] Po programování je člověk hladovej.
Tocimanko0
Grafoman
15. 8. 2008   #4
-
0
-

http://fade.webstudio4u.eu
Najjednoduchšie sa mi to zdá s GET parametrami. Fakt nie je iná možnosť, než na všetko odkazovať absolútne? Veď to je maximálna prasačina. Testujem na lokále a dám to na nejaký server a musím všetko prepisovať?

Nahlásit jako SPAM
IP: 195.91.84.–
bukaj0
Věrný člen
15. 8. 2008   #5
-
0
-

Tocimanko
Najjednoduchšie sa mi to zdá s GET parametrami.
Existují lepší a snad i jednodušší způsoby ;o)

Fakt nie je iná možnosť, než na všetko odkazovať absolútne?
Můžeš si na konstruování URL vytvořit nějakou „továrnu“.

Testujem na lokále a dám to na nejaký server a musím všetko prepisovať?
Ne, vůbec. Tedy pokud to na lokále a ostrém serveru bude sídlit ve stejné složce.

A teď k tomu lepšímu a jednoduššímu řešení než GET parametry – všechno (nejspíš ale kromě stylů a obrázků) přepisuj na index.php a tam se tepre rozhodni, jaké parametry ti z toho vylezou. Pro představu, jak se to používá ve velkém, se např. můžeš podívat, jak to mají dělané v Zendu[1]. Zjednodušeně to jde vyřešit pomocí pár perl-compatibile regulárních výrazů:

<?php

// cesty („routy“)
$urls = array(
(object) array(
'regexp' => '~^sortiment/(?<kategoria>.*)/?$~',
'defaults' => array('pg' => 'sortiment')
),
(object) array(
'regexp' => '~^(?<pg>.*)/?$~',
'defaults' => array()
)
);

// základ, pokud by ses rozhodl později aplikaci dát do nějaké podsložky
define('URL_BASE', '/');

// momentální adresa zkrácené o základ
$uri = $_SERVER['REQUEST_URI'];
if (substr($_SERVER['REQUEST_URI'], 0, strlen(URL_BASE)) === URL_BASE) {
$uri = substr($_SERVER['REQUEST_URI'], strlen(URL_BASE));
}

$params = array();
foreach ($urls as $url) {
if (preg_match($url->regexp, $uri, $matched)) {
$params = array_merge($url->defaults, $matched);
}
}
// nyní v $params něco je, pokud byla nějaká routa „mačnuta“,
// jinak je pole prázdné a tudíž asi vrátit čtyřista čtyřku

Něco podobného používám, akorát mám obousměrnou variantu – tzn. dokáže mi z URL dostat pole parametrů a z pole parametrů získat zpětně URL. Pokud ale děláš něco menšího, tak ti na adresu ale úplně stačí nějaká malá „továrnička“ typu:
<?php

function url($url)
{
return URL_BASE . $url;
}

Použití je doufám zřejmé (<a href="<?php echo url('sortiment/xyz'); ?>">xyz</a>).

[1] http://framework.zend.com/manual/en/zend.controller.router.html

Nahlásit jako SPAM
IP: 85.70.13.–
Jak se správně ptát? -> http://www.hash.cz/inferno/otazky.html[br][br] Po programování je člověk hladovej.
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 3 hosté

Podobná vlákna

Mod_rewrite — založil Kuko.sk

MOD_REWRITE — založil netman92

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý