Autor Zpráva
kujeba
Profil
Dobrý den,
mám htaccess tohohle znění:

#MOD REWRITE
RewriteEngine on

RewriteCond %{HTTP_HOST} ^domain.cz
RewriteRule ^(.*) http://www.domain.cz/$1 [R=301,QSA,L]

ErrorDocument 404 /index.php?page=not_found

RewriteRule ^([a-zA-Z]{2})/([-_a-zA-Z0-9\/]*)/$ /index.php?lang=$1&page=$2 [L,QSA]
RewriteRule ^([a-zA-Z]{2})/([-_a-zA-Z0-9\/]*).html$ /index.php?lang=$1&page=$2&html=true [L,QSA]
RewriteRule ^([a-zA-Z]{2})/([-_a-zA-Z0-9\/]*).glr$ /index.php?lang=$1&page=$2&glr=true [L,QSA]
RewriteRule ^([a-zA-Z]{2})/$ /index.php?lang=$1 [L,QSA]
RewriteRule ^([-a-zA-Z0-9\/]*).html$ /index.php?page=$1&html=true [L,QSA]
RewriteRule ^([-a-zA-Z0-9\/]*).glr$ /index.php?page=$1&glr=true [L,QSA]
RewriteRule ^([-a-zA-Z0-9\/]*)/$ /index.php?page=$1 [L,QSA]

RewriteCond %{QUERY_STRING} ^$
RewriteRule ^kalendar/(.+)-([^/]+)-([^/]+)$ /kalendar/?print=$3&month=$2&year=$1 [L,QSA]

#RewriteCond %{QUERY_STRING} ^$
#RewriteRule ^([^/]+)/(.+)-([^/]+)-([^/]+)$ $1/?print=$4&month=$3&year=$2 [L,QSA]

RewriteRule ^$ /index.php?lang=cz [L,QSA]


SetOutputFilter DEFLATE
SetEnvIfNoCase Request_URI \.(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI \.pdf$ no-gzip dont-vary
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

AddType application/octet-stream .docx .doc .pdf .xls .xlsx .ppt .pptx .zip .rar .mp3

Jedná se mi o RewriteCond %{QUERY_STRING} ^$

Pokud použiju .htaccess tak jak je výše uveden, mám na vstupu
http://www.domain.cz/kalendar/2013-1-false
a na výstupu:
http://vyvoj.domain.cz/kalendar/?print=false&month=1&year=2013
a stránka se mi nacte

Pokud ale tento RewriteRule zakomentuju a použiji ten původně zakomentovanej,
mám sice na vstupu také:
http://www.domain.cz/kalendar/2013-1-false
a na výstupu:
http://vyvoj.domain.cz/kalendar/?print=false&month=1&year=2013
(podle http://htaccess.madewithlove.be/)

ovšem stránka se nenačte a oběví se HTTP 404.

Může mi, prosím, někdo poradit co s tím?
Kajman
Profil
Zkuste dát do konkrétnější pravidlo před obecná pravidla začínající řádkem 9. Ono tam i tak asi dojde postupně ke dvěma přepisům, ale třeba to již bude tak, jak si přejete.
kujeba
Profil
Nakonec pomohla následující úprava:

RewriteRule ^(*)/(.+)-([^/]+)-([^/]+)$ http://www.domain.cz/$1/?print=$4&month=$3&year=$2 [L,QSA]
Kujeba
Profil *
Tak zase jiná chyba. Nejprve dojde k přepisu, přestože neni splněna podmínka v rewriteRule (například při vstupu http://www.domain.cz/kalendar/), server se pokusí vypsat stránku http://www.domain.cz/kalendar/?print=&month=&year= a pak ji přepíše správnou stránkou http://www.domain.cz/kalendar/ Normální uživatel si asi ničeho nevšimne, ale FireBug řve, že je tam chyba (kupodivu dle FireBugu je v javascriptu).

Kdyz zmenim revriteRule na:
RewriteRule ^kalendar/(.+)-([^/]+)-([^/]+)$ http://www.domain.cz/$1/?print=$4&month=$3&year=$2 [L,QSA]
tak vše funguje i dle FireBugu zcela bez problémů. Proč? Poradí někdo?

Nemůžu použít zápis s konkrétní hodnotou (kalendar), protože ta hodnota se může měnit. Neměnný zůstavá požadovaný formát pro vstup za posledním lomítkem. Tedy XXXX-X-X
Davex
Profil
Kujeba:
tak vše funguje i dle FireBugu zcela bez problémů. Proč? Poradí někdo?
Asi proto, protože přesměrováváš jinam (uvedením absolutní cesty se nepodstrkává). V druhém případě jsou jinak naplněné proměnné $1$4.

# přesměrovává na http://www.domain.cz/kalendar/?print=posledni&month=mesic&year=rok
RewriteRule ^(*)/(.+)-([^/]+)-([^/]+)$ http://www.domain.cz/$1/?print=$4&month=$3&year=$2 [L,QSA]

# přesměrovává na http://www.domain.cz/rok/?print=&month=posledni&year=mesic
RewriteRule ^kalendar/(.+)-([^/]+)-([^/]+)$ http://www.domain.cz/$1/?print=$4&month=$3&year=$2 [L,QSA]
Kujeba
Profil *
Konečné (snad) řešení je následující:

RewriteCond %{REQUEST_URI} !^/?(js|storage|img|fonts)/
RewriteRule ^([a-zA-Z0-9]*)/([0-9]{4})-([0-9]*)-([a-z]+)$ /$1/?print=$4&month=$3&year=$2 [L,QSA]

Tohle, zdá se, funguje opravdu tak jak má. Sice mi tu nikdo nepomoh, ale alespoň mne nasměroval kde a co hledat. Takže díky :-)
Kdyby mi někdo ale byl ochoten poradit, jak jinak zapsat podmínku, že číslo může být jednomístné NEBO dvoumístné, byl bych opravdu vděčnej.
Můj zápis ([0-9]*) není ideální, neboť připouští i troj a vícemístný čísla.
Petr__
Profil *
Kujeba:
Kdyby mi někdo ale byl ochoten poradit, jak jinak zapsat podmínku, že číslo může být jednomístné NEBO dvoumístné, byl bych opravdu vděčnej.

Takto ([0-9]{1,2})?

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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