» »

Rewrite URLja (apache)

Rewrite URLja (apache)

levaky ::

Lep pozdrav!

Če cel dan se matram z rewritom enega URLja, pa mi nikakor ne uspe. Ali mi sploh ne naredi novega URLja, ali pa mi prenese samo eno spremenljivko namesto dveh.

Stari URL: http://www.spletna.com/index.php?option...

Novi željeni URL: http://www.aquanubis.com/forum/search.p...

Se pravi, iz starega URLja moram izloščiti u in start in ga prenesti v novi URL.

Probal sem različne načine, a noben ne dela...
Primer 1:
RewriteCond %{QUERY_STRING} ^(.*&)?option=com_smf\&Itemid=[0-9]+\&action=profile\&u=([0-9]+)\&sa=showPosts\&start=([0-9]+) [NC]
RewriteRule ^(index\.php)?$ /forum/search.php?author_id=$2&sr=posts&start=$3 [R=301,L]

Primer 2:
#RewriteCond %{ENV:REDIRECT_STATUS} ^$
#RewriteCond %{QUERY_STRING} ^(.*&)?option=com_smf(&.*)?$ [NC]
#RewriteCond %{QUERY_STRING} ^(.*&)?Itemid=41(&.*)?$ [NC]
#RewriteCond %{QUERY_STRING} ^(.*&)?action=profile(&.*)?$ [NC]
#RewriteCond %{QUERY_STRING} ^(.*&)?u=([0-9]+)(&.*)?$ [NC]
#RewriteCond %{QUERY_STRING} ^(.*&)?sa=showPosts(&.*)?$ [NC]
#RewriteCond %{QUERY_STRING} ^(.*&)?start=([0-9]+)(&.*)?$ [NC]
#RewriteRule ^(index\.php)?$ /forum/search.php?author_id=%7&sr=posts&start=%2 [R=301,L]

Noben od teh dveh ne deluje, slednji sicer vrne %2 pravilno, ne vrne pa author_ID...

Vidimo pa tudi, da je tale zadnji precej grd in verjetno niti ne najbolj optimiziran:)

Ali mi lahko neko pomaga... Imam kar nekaj različnih urljev, ki jih moram takole popraviti, vendar ostale bom verjetno znal sam...

Hvala, Matej

b ::

Uporabi %2 in %3 namesto $2 in $3.

Če matchas v RewriteCond je %številka, $številka pa je iz RewriteRula.

To je za prvi primer.

V drugega se zdaj ne bom spuščal, ampak takole na uč, backreferences lahko uporabljaš iz enega regexa, ne pa iz 7 različnih :)

Vsekakor pa vključi RewriteLog in RewriteLogLevel, boš lažje ugotovil, kaj je narobe.

Aja, pa v regexu ne rabiš escapat &, ker ni poseben znak. To je skoraj gotovo narobe.

Zgodovina sprememb…

  • spremenilo: b ()

b ::

Zdej sem se spomnil... drugi primer lahko rešiš takole:

RewriteCond %{QUERY_STRING} (&|^)param1=(regex1)($|&)
SetEnv PARAM1 %2
RewriteCond %{QUERY_STRING} (&|^)param2=(regex2)($|&)
SetEnv PARAM2 %2
RewriteRule ^index.php /forum/search.php?param1=%{PARAM1}&param2=%{PARAM2}

to bi moralo delat, pa še bolj resilient je, ker lahko imaš poljubni vrstni red parametrov v query stringu.

Zgodovina sprememb…

  • spremenilo: b ()

levaky ::

Ufff b, hvala za izčrpen odgovor:)

Ja, tisti Primer 2 je ena živa groza:)

Mi pa tvoja rešitev za prvi primer odgovarja(problem je bil $), saj so zadeve vedno v istem vrstnem redu, prav tako pa se lahko parametra 1 in 2 pojavita v več querijih, ki pa morajo biti preusmerjeni na različne URLje...

Hvala, Matej

levaky ::

Še nekaj me heca...

Kako spravim znak # v rewritan URL? Ves čas mi ga apache zamenjuje z %23...

Rewrite rule:
RewriteRule ^(index\.php)?$ /forum/viewtopic.php?t=%1\#p%2 [R=301,L]

lp, Matej

b ::

ne vem na pamet, en flag imaš ki ga daš tja zraven R in L. Poglej v dokumentacijo.


OK, zdej vem :)

'noescape|NE' (no URI escaping of output)
This flag prevents mod_rewrite from applying the usual URI escaping rules to the result of a rewrite. Ordinarily, special characters (such as '%', '$', ';', and so on) will be escaped into their hexcode equivalents ('%25', '%24', and '%3B', respectively); this flag prevents this from happening. This allows percent symbols to appear in the output, as in

Zgodovina sprememb…

  • spremenilo: b ()

levaky ::

Hum, lepo prenese $ in ; znaka recimo, medtem ko # še vedno noče... Preprosto prekine rewrite, ko pride do znaka # in tam zaključi.

Matej

b ::

Amm... mogoče ga pa smatra za začetek komentarja :) Sam če ga escapaš, bi moralo bit OK. RewriteLog vključi.

levaky ::

Eh, moja napaka.

Sem z wgetom prejemal stran in tam ni prikazovalo znaka. Ko sem URL vnesel v FF, je šlo lepo skozi, brez da bi moral eskcapat.

Najlepša ti hvala za pomoč, Matej


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

nodejs + Socket.IO gostovanje

Oddelek: Programiranje
61130 (829) strel
»

mod_rewrite - prosim za nasvet

Oddelek: Programiranje
71419 (1295) carota
»

Rewrite preusmeritev v .htacess

Oddelek: Izdelava spletišč
6947 (793) Baja
»

htaccess - ce obstaja - serviraj, v nasprotnem primeru ....

Oddelek: Izdelava spletišč
61109 (1029) Lion29
»

.htaccess rewrite za poddomeno

Oddelek: Izdelava spletišč
71441 (1361) alessio2

Več podobnih tem