Autor Zpráva
Rostislav Doležal
Profil
Dobrý den,
najde se někdo, kdo mi pomůže vyřešit záhadu v .htaccess, ze které už jsem docela zoufalej?
Problém je takový, že mám odkaz ve tvaru :
<a href="norma/neco1/neco2/neco3">LINK</a>

A v .htacces už mám podmínku, která by mě měla přepsat link na formu
eshop.mojedomena.com/norma-neco1-neco2-neco3.html
problém je ten, že se mi stále ukazuje v adrese otazník, takže to vypadá takto
eshop.mojedomena.com/?norma-neco1-neco2-neco3.html


Zde je .htaccess kód:

RewriteEngine On
RewriteBase /
RewriteRule ^/?index.php / [R=301,L]

RewriteRule ^norma/([^/]+)/([^/]+)/([\d\.]+)$ /index.php?norma-$1-$2-$3.html [L,QSA]
Kajman
Profil
Přidejte si podmínku u přesměrování, aby se prováděla jen pokud už to není vnitřně přepsané.

RewriteCond %{ENV:REDIRECT_STATUS} =""
RewriteRule ^/?index.php / [R=301,L]

PS. Vzhledem ke kódu 301 si může prohlížeč či proxy nějakou dobu pamatovat původní chování.
Rostislav Doležal
Profil
Když přidám podmínku, kterou jste mi napsal, tak se odkaz zobrazuje ještě hůř a to :
eshop.mojedomena.com/norma/neco1/neco2/neco3

Potřebuji, aby se ten link přepsal pak na eshop.mojedomena.com/norma-neco1-neco2-neco3.html
Kajman
Profil
S původním kódem se to chová tak, že se adresa
/norma/neco1/neco2/neco3
vnitřně přepíše podle druhého pravidla na
/index.php?norma-neco1-neco2-neco3.html
a hned se to také přesměruje posled prvního pravidla na
/?norma-neco1-neco2-neco3.html

Pokud nechcete vnitřní přepis na index.php, tak jednoduše upravte druhé pravidlo na to přesměrování
RewriteRule ^norma/([^/]+)/([^/]+)/([\d\.]+)$ /norma-$1-$2-$3.html [L,R]
Ale lepší bude upravit i odkazy.
Rostislav Doležal
Profil
Když odstraním index.php a bude to vypadat takto :
RewriteRule ^norma/([^/]+)/([^/]+)/([\d\.]+)$ /norma-$1-$2-$3.html [L,R]
tak mi stránka hodí chybu, že url adresa neexistuje, což má pravdu, protože se mu snažím něco podstrčit. Ale ten index.php se musí vykonat, jinak to nic nezobrazí.
Kajman
Profil
Víte, nejdůležitější je stanovit si, jak se ty adresy mají přesně chovat. To za Vás žádná pravidla neudělají.
Pokud ještě chcete přepsat norma-cokoliv.html na index.php, tak zkuste přidat.

RewriteRule ^norma-.*.html$ /index.php?$0 [L,QSA]
Rostislav Doležal
Profil
Chovat se mají takto:
Prezentace odkazu -> <a href="norma/neco1/neco2/neco3">LINK</a>
Když přijde odkaz ve tvaru
eshop.mojedomena.com/norma/neco1/neco2/neco3
tak aby se předělal na
eshop.mojedomena.com/norma-neco1-neco2-neco3.html
ale ještě k tomu, aby se vykonal index.php, který v sobě má už php funkci explode a rozebírá odkaz na určité proměnné

Podařilo se mi to vyřešit pouze do fáze, kdy odkaz vypadal takto:
eshop.mojedomena.com/?norma-neco1-neco2-neco3.html
ale potřebuji se zbavit toho otazníku, který mi tam docela vadí :(
Kajman
Profil
Když zkombinujete všechny rady ([#2], [#4] a [#6]), tak by to mohlo jít. I když mi stále uniká význam odkazování na jinou než výslednou adresu.
Mouse7777777
Profil *
Ať dělám co dělám, prostě se mi nedaří, nemohl by si mi prosím to nějak napsat dohromady, jak by to mělo vypadat.
Nebo napsat uplně jinak, když potřebuji z odkazu /norma/neco1/neco2/neco3 , aby se provedl index.php a ještě k tomu to v adrese zobrazilo /norma-neco1-neco2-neco3 právě bez toho otazníku a index.php
Předem díky
Kajman
Profil
A má tam být ta .html koncovka nebo ne? Pokud ne, tak si pravidla upravte. Nezaručuji, ale mělo by stačit něco takového...

RewriteEngine On
RewriteBase /
RewriteRule ^norma/([^/]+)/([^/]+)/([\d\.]+)$ norma-$1-$2-$3.html [L,R,NE]
RewriteRule ^(norma-.*\.html)$ index.php?$1 [L,QSA]

Případně si zapněte rewritelog a prozkoumejte chování, pokud to bude zlobit nadále.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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

0