Autor Zpráva
cayman
Profil *
zdravim,
cely den si hraji s mod_rewrite, celkem me to bavi, povedlo se mi vyresit dost pravidel, ale jedno zakladni bych potreboval poradit.

mam www.example.cz, potreboval bych aby se podstrcil www.example.cz/cz/; to same pri zadani www.example.cz/index.php

Jazyk predavam v $_GET jako lang, tedy index.php?lang=cz,

mam pravidlo na prepis www.example.cz/index.php?lang=cz
RewriteEngine On
RewriteBase /
RewriteRule ^([a-z]{0,2})/$ index.php?lang=$1 [QSA,L]

ale to ostatni nak uz nemuzu, asi jsem uz dost vykoukanej a uz me nic nenapada.

Diky moc za pomoc
Kajman_
Profil *
Zdravím kolegu,

zkusil bych

RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} !lang=
RewriteRule ^(index\.php)?$ index.php?lang=cz [QSA,L]
RewriteRule ^([a-z]{0,2})/$ index.php?lang=$1 [QSA,L]

Ale spíš bych otestoval v php, zda lang je nastavená a pokud ne, tak ji defaulně nastavit. Cpát to do pravidel je zbytečné zatěžování serveru.
cayman
Profil *
zdravim,
diky moc za reakci

nejde mi o nastaveni lang, to delam v php jak rikate, ale jde mi o to kdyz nekdo zada web, aby se presmeroval jakoby na adresar s vychozi mutaci (ktery samozrejme neexistuje, takze spise podstrcil se mu adresar cz/)

zamotal jsem prave v tom, ze bych chtel z hledila seo mit jednu url vychozi, takze www.example.com/index.php, www.example.com/, www.example.com/index.php?lang=cz na www.example.com/cz/ (moznosti bez www mam osetrene jinym pravidlem)

to co jste nabidl bohuzel neprovedlo co bych pozadoval.

Mutaci bych potreboval, protoze pokud (a casto se stava) mam i anglickou, stranky a clanky stejne budu potrebovat strkat pod jiny adresar (en/, ...)

Diky moc pokud mi pomuzete, jsem tak na pul cesty, chystam se na rewritemap a nemam za sebou zakladni problem;)
cayman
Profil *
udelal jsme to takto, zatezuje to hodne server?

RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} !lang= [NC]
RewriteRule ^(index\.php)?$ /cz/ [R=301,QSA]
RewriteRule ^([a-z]{0,2})/$ index.php?lang=$1 [QSA]
Kajman_
Profil *
To Vám ale nezchroustá www.example.com/index.php?lang=cz

Zkusil bych to ješte poupravit...

RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} ^rw=1
RewriteRule .* - [S=3]
RewriteCond %{QUERY_STRING} ^lang=([a-z]{0,2})(&.*)? [NC]
RewriteRule ^(index\.php)?$ %1/? [R=301,QSA]
RewriteRule ^(index\.php)?$ cz/ [R=301,QSA]
RewriteRule ^([a-z]{0,2})/$ index.php?rw=1&lang=$1 [QSA]

A server to asi zvládne.
Kajman_
Profil *
A ještě bych tam nafrkal raději ty flagy L.
cayman
Profil *
velice zajimava pravidla!

to rw ma zpusobit nezacykleni? ale neni mi jasny jaktoze nejaky parametr zpusobi nezacykleni; respektive jaktoze by se to zacyklilo kdyby tam nebyl

to ze to neosetrilo variantu www.example.com/index.php?lang=cz jsem vedel, byl jsem to ale ochoten ozelet;) uz mi to neslo

variantu www.example.com/index.php?lang=cz to prepise na www.example.com/cz/?&lang=cz
;(

diky za trpelivost
Kajman_
Profil *
Přesně tak, člověk si musí dávat pozor na cyklení. Proto si interně používám na začátku pomocný parametr rw=1. Když je nastaven, tak rovnou díky S=3 přeskočím následující tři pravidla.

Přidal to tam zapomenutý flag QSA, teď už by to snad mělo fungovat.

RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} ^rw=1
RewriteRule .* - [S=3]
RewriteCond %{QUERY_STRING} ^lang=([a-z]{0,2})(&.*)? [NC]
RewriteRule ^(index\.php)?$ %1/? [R=301,L]
RewriteRule ^(index\.php)?$ cz/ [R=301,QSA,L]
RewriteRule ^([a-z]{0,2})/$ index.php?rw=1&lang=$1 [QSA,L]
cayman
Profil *
ano funguje, jste neomylny;)

na to jsem moh prijit sam, ty flagy nemam moc zazity, presne kdy pouzit/nepouzit QSA, ...

kazdopadne si hraju s rewrite_mod druhy den, a treba kdyz to tak testuju, dost casto po zmene v .htaccess musim mazat cache prohlizece aby se pri refresh projevila zmena (ne vzdy, tezko to popsat), nevim treba je to naka moje chyba v konfiguraci apache

pokud se splni rewritecond (jakakoli), tak se provede tolik pravidel kolik je pod podminkou, nebo jen jedno prvni?
v jazycich se pouzijou zavorky a je jasny co se v jaky vetvi provede, pokud se maj provist vsechny pravidla a mi do kazdyho davame L (coz ma zapricinit aby se uz dalsi neprovedlo), tak mi neni jasny asi cely system tech zapisu;))
Kajman_
Profil *
musim mazat cache

Proto nepoužívám pro testování kód 301 ale 302 a teprve po odladění dávám na serveru 301.

tak se provede tolik pravidel kolik je pod podminkou, nebo jen jedno prvni?

První. Pro víc se může použít znegování a finta s tím flagem S.

davame L (coz ma zapricinit aby se uz dalsi neprovedlo)

V tom se hodně chybuje. Lidi si myslí, že když dají L, tak se nebudou pravidla procházet, ale pravda je jiná. Pokud došlo ke změně, tak se budou pravidla procházet znovu pro změněnou cestu. L ve spojení s nepřepsáním je cesta opravdového ukončení procházení pravidel. Při zapnutém rewrite logu uvidíte, jak to funguje na vlastní oči. V tom se dělá tolik chyb, že by to snad mohl Yuhů raději osvětlit u popisu tohoto flagu na jpw :-)
cayman
Profil *
rewritelog jsem chtel zprovoznit hned jak jsem s rewritem zacal, podle manualu proste nastavit cestu, apache mi vytvoril soubor, ale je porad prazdny, nic tam nezapisuje

v httpd.conf jsem nastavil RewriteLog logs/rewrite.log
platforma windows, tak nevim kde mam chybku
Kajman_
Profil *
Výchozí hodnota pro RewriteLogLevel je 0 - je tedy třeba nastavit i to.
Toto téma je uzamčeno. Odpověď nelze zaslat.