1. Home
  2. Tehnisks
  3. mod_proxy un URL rakstzīmju kodējums
  1. Home
  2. Apache
  3. mod_proxy un URL rakstzīmju kodējums

mod_proxy un URL rakstzīmju kodējums

Ja lietotnei, kas darbojas aiz starpniekservera, ir svarīgi, lai visas URL rakstzīmes līdz lietotnei nonāktu nemainītas, tad diemžēl ienākošo pieprasījumu pāradresācija, kas konfigurēta caur My Zone (mod_proxy), šim nolūkam nav piemērota, jo pirms URL nodošanas lietotnei tā veic noteiktas izmaiņas.

Piemēram, dažas rakstzīmes tiek pārkodētas to heksadecimālajos ekvivalentos.
Tādas rakstzīmes kā “#”, “&” un “?” tiek pārveidotas attiecīgi par “%23”, “%26” un “%3F”.

Tas savukārt padara diezgan sarežģītu tādu lietotņu kā Thumbor izmantošanu. Lai gan teorētiski, izmantojot mod_proxy, varētu palīdzēt atslēgvārds nocanon, diemžēl My Zone šo opciju neatbalsta.

Problēmu var atrisināt, aizstājot mod_proxy ar Apache pārrakstīšanas noteikumu — piemēram, pievienojot šādu Apache direktīvu bloku:
RewriteCond "%{THE_REQUEST}" "^[A-Z]+\ /([^?\ ]+)/?"
RewriteRule "^/(.*)" "http://127.0.157.196:8888/%1" [P,NE]

127.0.157.196 un 8888 ir jāaizstāj ar pareizajām vērtībām (pareizo loopback IP adresi vari atrast vai nu My Zone vadības panelī sadaļā Webhosting → System information, vai arī, palaižot čaulā komandu vs-loopback-ip -4).

Karodziņš NE Rewrite rule nodrošina, ka URL vai lietotnei nodotajos parametros netiek veiktas nekādas izmaiņas.
https://httpd.apache.org/docs/2.4/rewrite/flags.html#flag_ne

Drošības brīdinājums!

Karodziņa [NE] (No Escape) izmantošana var radīt drošības risku, ja pieprasījumi tiek pāradresēti uz nezināmu vai publisku servisu. Izmanto karodziņu [NE] tikai tad, ja veic proxy uz iekšēju, uzticamu servisu, un pārliecinies, ka aizmugursistēma validē URL un neinterpretē tos kā komandrindas argumentus vai failu ceļus.

RewriteCond skaidrojums

RewriteCond "%{THE_REQUEST}" "^[A-Z]+\ /([^?\ ]+)/?"

Šis ir nosacījums, pie kura noteikums tiek piemērots.
Šeit tiek izmantots īpašs mainīgais %{THE_REQUEST}, kas satur pārlūka sākotnējo HTTP pieprasījuma rindu, piemēram:
GET /images/foo.jpg?size=large HTTP/1.1

Regulārās izteiksmes (regexp) ^[A-Z]+\ /([^?\ ]+)/? skaidrojums:

  • ^[A-Z]+ — atbilst HTTP metodei (piem., GET, POST, HEAD u. c.)

  • \ / — atstarpe, kam seko slīpsvītra (kā sākas katrs URL)

  • ([^?\ ]+) — uztver visas rakstzīmes līdz pirmajai ? (vaicājuma parametri) vai atstarpei.
    Citiem vārdiem sakot, tas uztver tikai URL “tīrā ceļa” daļu bez vaicājuma virknes.

  • /? — atļauj vienu izvēles noslēdzošo slīpsvītru beigās.

Šī “uztvertā” daļa tiek saglabāta kā grupa %1, ko vēlāk var izmantot RewriteRule ietvaros.

Updated on 6. Nov 2025
Was this article helpful?

Related Articles