Autor Zpráva
Lukáš M
Profil
zdravím,
s pomocí různých zdrojů jsem si "spatlal" pravidla pro přesměrování, můžu je sem napsat, můžu i popsat chyby, které vyrábějí, ale bylo to dosti nepřehledné (po 3 dlouhých odstavích jsem to vzdal), a tak bych raději požádal někoho znalého, zda by mi mohl pomoci s tímto pro profáka jistě jednoduchým "zadáním":

1. pokud není na začátku adresy "www.", doplnit jej tam
2. pokud není na konci adresy lomítko (a pokud jde opravdu o adresář a ne soubor), doplnit jej tam
3. adresu /bla-1/ zpracovat jako /index.php?rid=1 (id rubriky=1)
4. adresu blabla-4 zpracovat jako /index.php?rid=1&id=4 (id rubriky=1, id clanku=4)

děkuju moc! regulární výrazi, potažmo mod_rewrite není zrovna můj šálek čaje. ;)
Kajman
Profil *
Možná by to mohlo být takhle nějak... ale 4. pravidlo mi v zadání připadalo nesmyslné, tak je tam jinačí :-)


RewriteEngine On
RewriteBase /
#1.
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301]
#2.,3.,4. - vyskoci pokud vysledek existuje
RewriteCond %{REQUEST_FILENAME} -F
RewriteRule .* - [L]
#2.
RewriteRule ^(.*[^/])$ $1/ [R=301]
#3.
RewriteRule ^.*-([0-9]+)/?$ index.php?rid=$1 [L,QSA]
#4.
RewriteRule ^.*-([0-9]+)/.*-([0-9]+)/?$ index.php?rid=$1&id=$2 [L,QSA]
Kajman
Profil *
Jen se nesmíte divit, co to bude dělat, až na ty stránky přistoupíte přes ip :-) Ale to už je chyba v zadání :-)
Lukáš M
Profil
děkuji za radu, ale ještě to má nějaké mušky :(
např.

1. http://www.rekvalifikace-prace.cz/bla-1/blabla-1.html se přepíše na http://www.rekvalifikace-prace.cz/bla-1/blabla-1.html/ a vrátí 404

2. http://rekvalifikace-prace.cz/bla-1/blabla-1.html -> na http://www.rekvalifikace-prace.cz/bla-1/blabla-1.html/blabla-1.html/ -> 404

3. http://www.rekvalifikace-prace.cz/bla-1/ -> http://www.rekvalifikace-prace.cz/bla-1/ -> OK, funguje dokonale

4. http://www.rekvalifikace-prace.cz/bla-1 -> http://www.rekvalifikace-prace.cz/bla-1 -> OK (jen škoda, že se na konec nepřidá lomítko, aby to bylo naprosto stejné jako předchozí)

5. http://rekvalifikace-prace.cz/bla-1/ -> http://www.rekvalifikace-prace.cz/bla-1/ -> OK, funguje dokonale

6. http://rekvalifikace-prace.cz/bla-1 -> http://www.rekvalifikace-prace.cz/index.php/?rid=1 -> OK ale bez kýženého efektu coolURI :(

7. http://www.rekvalifikace-prace.cz/bla-5/bla-1/ -> http://www.rekvalifikace-prace.cz/bla-5/bla-1/ -> zobrazí totéž co http://www.rekvalifikace-prace.cz/bla-1/ namísto toho, aby to vrátilo 404 - ale to už by mělo jít ošetřit v php, pokud to tedy nejde přímo v mod_rewrite

to, co tu popisuji je přesně fáze, do které jsem (i když s úplně jinými a poněkud kostrbatými pravidly) došel při svých "experimentech" :( a nechtěl to to rozepisovat s tím, že nová pravidla bude asi snadzší napsat :) pokud vás tedy mohu požádat o doladění?
Kajman
Profil *
No, tak druhé kolo střílení od boku :-)

To .html v zadání nikde nebylo. Z čehož první a poslední připomínky pramení.

RewriteEngine On
RewriteBase /
#1.
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/%{REQUEST_FILENAME} [R=301]
#2.,3.,4. - vyskoci pokud vysledek existuje
RewriteCond %{REQUEST_FILENAME} -F
RewriteRule .* - [L]
#2.
RewriteRule ^(.*[^/])$ $1/ [R=301]
#3.
RewriteRule ^.*-([0-9]+)/$ index.php?rid=$1 [L,QSA]
#4.
RewriteRule ^.*-([0-9]+)/.*-([0-9]+)\.html?$ index.php?rid=$1&id=$2 [L,QSA]
Kajman
Profil *
možná bude ještě třeba zaměnit [R=301] na [R=301,L]

A osobně pro testování používám 302, aby mi to nezůstalo v paměti prohlížeče. Po odladění vracím 301.
Lukáš M
Profil
omlouvám se, že jsem se tentokrát projevil jako taková lama, že nenapíšu ani správně zadání... :(
chyby v předchozím příspěvku jsem si dovolil očíslovat, abychom v nich měli jasno:

1. a 3. OK
2. , 5. a 6. vrací http://www.rekvalifikace-prace.cz/usr/www/clevernet/ds-1586/rekvalifik ace-prace.cz/www/bla-1/ a i když se to zobrazí správně, tak ta adresa přece jenom není to pravé :)
4. OK - jen je škoda toho lomítka, co chybí na konci, jde to nějak ošetřit?

díky moc, zvláště jestli se se mnou pustíte i do třetího kola :)
Kajman
Profil *
RewriteEngine On
RewriteBase /
#1.
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
#2.,3.,4. - vyskoci pokud vysledek existuje
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule .* - [L]
#3.
RewriteRule ^.*-([0-9]+)/$ index.php?rid=$1 [L,QSA]
#4.
RewriteRule ^.*-([0-9]+)/.*-([0-9]+)\.html?$ index.php?rid=$1&id=$2 [L,QSA]
#2.
RewriteRule ^(.*[^/])$ $1/ [R=301,L]
Lukáš M
Profil
pomalu se dostávám do fáze, kdy začínám mít pocit, že vás jen okrádám o čas a nikam to nevede :( přesto snažně prosím o další kola ;)

funguje:
http://www.rekvalifikace-prace.cz/bla-1/blabla-1.html
http://www.rekvalifikace-prace.cz/bla-1

nefunguje:
http://www.rekvalifikace-prace.cz/bla-1/
http://rekvalifikace-prace.cz/bla-1/
http://rekvalifikace-prace.cz/bla-1
http://rekvalifikace-prace.cz/bla-1/blabla-1.html

děkuji.
Kajman
Profil *
Tak to teda nechápu, pokud funguje http://www.rekvalifikace-prace.cz/bla-1 a negunguje http://www.rekvalifikace-prace.cz/bla-1/ tak by to s těmi pravidly jít nemělo. Zkusím se na to někdy časem kouknout a rovnou to i otestovat :-)
Lukáš M
Profil
Kajman
obrovské DÍKY! nevím, zda jsem skopal něco při kopírování já nebo se něco dělo na serveru, ale v současné podobě už mi to běhá. zdá se, že jste tu jediný, kdo do toho pořádně vidí a/nebo je ochoten se v těch regulárních výrazech hrabat a něco vykoumat. :) jste pro mne mág ;) děkuji a klaním se :)
Toto téma je uzamčeno. Odpověď nelze zaslat.

0