Portál AbcLinuxu, 12. května 2025 06:22
RewriteEngine on RewriteRule ^(.*) index.php?id=$1 [nc,L,QSA]takto je to ve stadiu kdy se premesruje vse vcetne css, pokud za zavorku doplnim napr. pismeno a : RewriteRule ^(.*)a index.php?id=$1 [nc,L,QSA] a zkusim link domena.cz/acokoliv tak vse funguje jak ma. Poradili by jste mi prosim jak pravidlo upravit aby se nesmerovalo vse ale jen ty odkazy index.php?id=cokoliv Vsem dekuji
domena.cz/index.php?id=*
, ale zároveň vám vadí, že se to takhle přesměrovává.
To pravidlo, které jste uvedl, funguje tak, že za $1 dosadí celou lokální část URL, tedy lomítko a vše za ním. Tj.:
domena.cz/ → domena.cz/index.php?id=/ domena.cz/neco → domena.cz/index.php?id=/neco domena.cz/index.html → domena.cz/index.php?id=/index.html domena.cz/styly.css → domena.cz/index.php?id=/styly.cssAtd. Mimochodem, to pravidlo vpravo by mělo začínat lomítkem:
RewriteEngine on RewriteRule ^(.*) /index.php?id=$1 [nc,L,QSA]
http://www.domena.cz/index.php?id=renovacea chci docilit cistych url ve formatu bez pripony:
http://www.domena.cz/renovace
RewiteRule
se týká dotazů prohlížeče, tj. když do prohlížeče zadáte adresu http://www.domena.cz/renovace
, přesměruje se (buď interně v rámci serveru, nebo změnou adresy v prohlížeči) na http://www.domena.cz/index.php?id=renovace
. Pokud ale chcete změnit odkazy ve stránce, na to RewriteRule
nemá žádný vliv – to musíte změnit buď ručně, nebo na to možná budou nějaké nástroje (které to mohou udělat jednorázově, nebo pro každý požadavek). Nebo pokud používáte nějaký redakční systém, možná půjde nastavit tak, aby generoval do odkazů čistá url.
http://www.domena.cz/renovacepresmeruje se interne na obsah
http://www.domena.cz/index.php?id=renovaceale prohlizec zobrazuje stale prvni odkaz. Chtel jsem tim docilit prave timto pravidlem
RewriteRule ^(.*) index.php?id=$1 [nc,L,QSA]aby se parametr $1 nahradil i hned za lomitko, nedokazu se bohuzel vyznat v teto sintaxy pravidel
ale prohlizec zobrazuje stale prvni odkaz.To je tím, že v parametrech nemáte
R
, které způsobí, že se vrátí přesměrování do prohlížeče, ten změní adresu a zeptá se serveru na novou. Pak ale musíte ošetřit, aby se ta nová adresa nepřesměrovávala, jinak se to zacyklí.
aby se parametr $1 nahradil i hned za lomitko, nedokazu se bohuzel vyznat v teto sintaxy pravidelPokud je dotaz jenom lomítko, je obsahem první skupiny
(.*)
a dosadí se pak za 1. parametr $1
. Tj. to vaše pravidlo dotaz na /
přepíše na index.php?id=/
. Syntaxe je regulární výraz, je to popsané v dokumentaci.
Asi by to tedy mělo vypadat takhle nějak:
RewriteEngine On RewriteRule ^/index.php$ - [L] RewriteRule ^(.*)$ /index.php?id=$1 [nc,L,QSA,R]
R
je právě to, co tam mít nesmí, pokud chce, aby v prohlížeči zůstala ,hezká` adresa.
ale prohlizec zobrazuje stale prvni odkaz.Z toho jsem usoudil, že v prohlížeči má být „ošklivá“ adresa.
RewriteEngine On RewriteRule ^/index.php$ - [L] RewriteRule ^(.*)$ /index.php?id=$1 [nc,L,QSA,R]Nastane chyba 500 internal server error
V prohlizeci ma zustat ta "hezka" www.domena.cz/renovaceV tom případě tam to
[R]
být nemá.
Nastane chyba 500 internal server errorPodívejte se do logu Apache, tam bude napsaná příčina chyby.
'nc'
nic není 'NC'
už jo, tak jestli to nebude ta 500-vka.nc
problém, muselo to hlásit chybu už u původní tazatelovi konfigurace – já jsem to jen okopíroval a ani jsem nezkoumal význam toho přepínače, takže taky nemusí dávat se zbytkem přepínačů smysl.
Vím, o co se snažíš. Zkus se inspirovat tady:
http://latrine.dgx.cz/hadanka-znate-mod_rewrite
Nebo použij rewrite tak, aby bral pouze soubory bez koncovky
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.