Forum » Izdelava spletišč » 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
Č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.
Č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}¶m2=%{PARAM2}
to bi moralo delat, pa še bolj resilient je, ker lahko imaš poljubni vrstni red parametrov v query stringu.
RewriteCond %{QUERY_STRING} (&|^)param1=(regex1)($|&)
SetEnv PARAM1 %2
RewriteCond %{QUERY_STRING} (&|^)param2=(regex2)($|&)
SetEnv PARAM2 %2
RewriteRule ^index.php /forum/search.php?param1=%{PARAM1}¶m2=%{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
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
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
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
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
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 ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | nodejs + Socket.IO gostovanjeOddelek: Programiranje | 1130 (829) | strel |
» | mod_rewrite - prosim za nasvetOddelek: Programiranje | 1419 (1295) | carota |
» | Rewrite preusmeritev v .htacessOddelek: Izdelava spletišč | 947 (793) | Baja |
» | htaccess - ce obstaja - serviraj, v nasprotnem primeru ....Oddelek: Izdelava spletišč | 1109 (1029) | Lion29 |
» | .htaccess rewrite za poddomenoOddelek: Izdelava spletišč | 1441 (1361) | alessio2 |