Autor Zpráva
Ondrej Podol
Profil *
Dobrý den vespolek.
Mám pravidla takhle:
ErrorDocument 404 /index.php?rodic1=404
RewriteEngine on
RewriteRule ^/$ /aktuality/ [R=301,L]
RewriteRule ^([^/]+)/$ /index.php?rodic1=$1 [QSA,L]
RewriteRule ^([^/]+)/([^/]+)/$ /index.php?rodic1=$1&rodic2=$2 [QSA,L]
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/$ /index.php?rodic1=$1&rodic2=$2&produkt=$3 [QSA,L]
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)-popis/$ /index.php?rodic1=$1&rodic2=$2&produkty=$3&popis=$4 [QSA,L]
Potřeboval bych poradit 2 věci:
- RewriteRule ^/aktuality/([^/]+)/$ /index.php?rodic1=aktuality&aktualita=$1 [QSA,L] nefunguje a vždycky předává proměnnou přes pravidlo jako rodice2(viz. mod_rewrite výše) a nevím proč:-(
- potřeboval bych ošetřit přístup k doméně bez www. tzn. aby při nezadání url http://domena.cz vrátil error 404. bohužel se na ftp dostanu v adresářích pouze k www a nevím, jak dostat .htaccess až k tomu http...
Petra
Profil
Označení L v hranaté závorce za pravidlem znamená, že to je poslední pravidlo a nic dalšího se nedělá. Tj. má to být u posledního, když je to u prvního a i všech dalších, tak nic kromě prvního pravidla se neprovádí.
Ondrej Podol
Profil *
Tak jsem teda udělal následující úpravu, ale na efektu to nic nemění:-(
ErrorDocument 404 /index.php?rodic1=404
RewriteEngine on
RewriteRule ^/$ /aktuality/ [R=301]
RewriteRule ^([^/]+)/$ /index.php?rodic1=$1 [QSA]
RewriteRule ^/aktuality/([^/]+)/$ /index.php?rodic1=aktuality&aktualita=$1 [QSA]
RewriteRule ^([^/]+)/([^/]+)/$ /index.php?rodic1=$1&rodic2=$2 [QSA]
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/$ /index.php?rodic1=$1&rodic2=$2&produkt=$3 [QSA]
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)-popis/$ /index.php?rodic1=$1&rodic2=$2&produkty=$3&popis=$4 [QSA,L]
Petra
Profil
No nefunguje to nejspíš proto, že to pravidlo neobsahuje smysluplnou URL pro přepisování. Co má tohle - ( [^/]+) - vyjadřévat? Taková URL žádná nebude. Ta stříška tam nemůže být vůbec, to lomítko znamená, že se má přepisovat něco jako třeba domena.cz//// na /index.php?rodic1=///, teda aspoň bych to tak chápala. A to asi není záměr, tam musí být nějaké znaky přece, normální slova, ne zástup lomítek. Takže třeba ^([a-z]+)/$
Ondrej Podol
Profil *
( [^/]+) značí cirka toto: vyjma znaku "/" načti vše do proměnné.
Z mod_rewrite na apache.org:
[^chars] Character class: None of chars.
Výsledek: mezi lomítky načítá do proměnných vše kromě lomítka.
Petra
Profil
Ondrej Podol: Ahaaa, to jsem nevěděla, že funguje :-) omlouvám se.


Nechápu moc, co to teda má dělat a co to dělá jinak. Ale tak zas zkusím hádat. Ty pravidla:

RewriteRule ^/aktuality/([^/]+)/$ /index.php?rodic1=aktuality&aktualita=$1 [QSA]
RewriteRule ^([^/]+)/([^/]+)/$ /index.php?rodic1=$1&rodic2=$2 [QSA]

Mají v podstatě stejnou podmínku, resp. nějaká adresa /aktuality/neco/ vyhovuje oběma těma podmínkám. Takže se asi aplikuje až ta druhá, tak snad to prohodit?

A možná zase jenom plácám :-)
Ondrej Podol
Profil *
RewriteRule ^/aktuality/([^/]+)/$ /index.php?rodic1=aktuality&aktualita=$1 [QSA]
RewriteRule ^([^/]+)/([^/]+)/$ /index.php?rodic1=$1&rodic2=$2 [QSA]

No, jasné, přehodit jsem to zkoušel, ale pořád nic. to lomítko u ^"/"aktuality být samozřejmě nemusí, ale i tak je efekt stejný. A je mu překvapivě i jedno, v jakém to je pořadí.
RewriteRule ^([^/]+)/([^/]+)/$ /index.php?rodic1=$1&rodic2=$2 [QSA]
RewriteRule ^aktuality/([^/]+)/$ /index.php?rodic1=aktuality&aktualita=$1 [QSA]
Vrací pořád první pravidlo:-/
Kajman
Profil *
Asi tam bude lepší přidat ty L - tzn. vynutit si při použití pravidla ukončení dalšího případného přepisování. a před aktualitami odstranit lomítko.

ErrorDocument 404 /index.php?rodic1=404
RewriteEngine on
RewriteRule ^$ /aktuality/ [R=301]
RewriteRule ^([^/]+)/$ /index.php?rodic1=$1 [QSA,L]
RewriteRule ^aktuality/([^/]+)/$ /index.php?rodic1=aktuality&aktualita=$1 [QSA,L]
RewriteRule ^([^/]+)/([^/]+)/$ /index.php?rodic1=$1&rodic2=$2 [QSA,L]
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/$ /index.php?rodic1=$1&rodic2=$2&produkt=$3 [QSA,L]
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)-popis/$ /index.php?rodic1=$1&rodic2=$2&produkty=$3&popis=$4 [QSA,L]
Ondrej Podol
Profil *
TO BYLO PŘESNĚ ONO!!!! díky, díky, díky moc.

Ještě se teda zkusím zeptat jednou na můj druhý problém. Potřeboval bych ošetřit přístup k doméně bez www. tzn. aby při zadání url http://domena.cz vrátil error 404. bohužel se na ftp dostanu v adresářích pouze k www a nevím, jak dostat .htaccess až k tomu http...
Kajman
Profil *
404 jsem nikdy nepotřeboval, tak si nejsem jistý...

Určitě jde 301 na přesměrování nebo 410 jako, že už je to nadobro pryč (ten flag G). To 410 by mohlo vypadat takhle nějak:

RewriteEngine on
RewriteCond %{HTTP_HOST} !^presna\.domena\.cz [NC]
RewriteCond %{HTTP_HOST} !^$
RewriteRule ^/(.*) http://presna.domena.cz/$1 [L,G]

RewriteRule ^$ /aktuality/ [R=301]
RewriteRule ^([^/]+)/$ /index.php?rodic1=$1 [QSA,L]
...
Kajman
Profil *
RewriteRule ^/(.*) http://presna.domena.cz/$1 [L,G]

no, ale asi bez toho zlobivého lomítka...

RewriteRule ^(.*)$ http://presna.domena.cz/$1 [L,G,QSA]
Ondrej Podol
Profil
Tak zápis jsem provedl:
RewriteCond %{HTTP_HOST} !^http://www\.zetr\.podolinsky\.net [NC]
RewriteCond %{HTTP_HOST} !^$
RewriteRule ^/(.*)$ http://www.zetr.podolinsky.net/$1 [L,G]
.....
bez toho lomítka ve třetím řádku (před závorkou) mi nahlásí server chybu: 410 gone. Což teda vůbec netuším, co je zač.
Ondrej Podol
Profil
správně to má být takto:
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www.mydomain.com$ [NC]
RewriteRule ^(.*)$ http://www.mydomain.com/$1 [R=301,L]
Tzn. blbé R-ko a trápím se s tím týden :)
Yuhů
Profil
Gone je to G, čili vyjádření, že je to nadobro pryč. Je lepší poslat Gone než posílat 404 Not found, to vypadá jako nekontrolovaná chyba, Gone je kontrolovaná. Hlavně přes mod_rewrite 404 vytvořit neumím.

Osobně se mi zdá jako hloupost doménu bez www uzavírat nějakou odpovědí 404 nebo jinou 4??. Vždycky je lepší hodit tam přesměrování na 301.

Protože se téma původně věnovalo lomítkům a L pravidlům, zavírám jej.
Toto téma je uzamčeno. Odpověď nelze zaslat.

0