apache rewrite

 ( pike.killer | 2018. május 6., vasárnap - 10:59 )

Van egy alkalmazás szerverem, amin fut az éles/teszt/ fejlesztő környezet és egy apache web szerverem. Szeretném publikálni az éles alkalmazást a neten, úgy hogy közben a másik két környezet ne legyen elérhető. Éles alkalmazás elérési címe: http://valami.hu/alkalmazas/p?z=111:valtozo:valtozo amennyiben a p?z=111 megváltoztatom 222-ra akkor a teszt rendszer érhető el.

Sajnos hosszas google-zás után sem sikerült olyan rewrite –ot összeállítani, ami csak azt a kérést szolgáltja ki, ahol URL-ben a /alkalmazas/p?z=111 vagy /alkalmazas/p?z=111:valtozo:valtozo szerepel a többi estben pedig átirányítja http://valami.hu/alkalmazas/p?z=111 címre.

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Valami szebb megoldáson nem gondolkoztál még?
Mondjuk test.valami.hu és basic authot elé?
a z= ... változóidat meg az apache beállítja ha tényleg muszáj.

--
Gábriel Ákos

Cél pont az lenne, hogy az internet csak a valmai.hu címet adja meg a felhasználó és az esetleges URL átírással ne tudjon hozzáférni se a teszthez se pedig a fejlesztői környezethez. Sajnos az éles rendszer elé nem lehet, semmilyen authot beállítani, mivel bárki számára elérhetővé kell tenni.

Arra gondolt, hogy csinalsz egy teszt.akarmi meg egy dev.akarmi oldalt a teszt es dev kornyezetnek es ezekre raksz pl apache auth-ot vagy access limitet vagy amit akarsz.
Sokkal tisztabb es kovethetobb hogy most eles, teszt vagy milyen kornyezetben is vagy, mint hogy valtozokent atadni ilyet url-ben, amit mellesleg siman barki atirhat es maris eleri a tesztet.

Mt azt lentebb is írtam az alkalmazás van úgy megírva, hogy a z=XXX-ben kell megadni az alkalmazás számát. Nem én szeretném megadni. Én max azt szeretném, hogy ne forduljon olyan elő, hogy egy külső felhasználó a szám átírásával egy másik környezethez férjen hozzá.

Én a helyedben elgondolkodnék azon, ha nem találnék kézenfekvő megoldást az általam kreált problémára:

a, kurva nagy zseni vagyok, évekkel a szakma elitje előtt haladva.

b, kurva szar ötlet, amit kitaláltam, anti-pattern, a gondolatot is agyon kell vágni egy lapáttal és aznap éjjel el is kell ásni valahol részegen, hogy másnap ne emlékezz rá, hogy hova temetted el.

Szerintem ez esetben a másodikról van szó.

"a többi estben pedig átirányítja http://valami.hu/alkalmazas/p?z=111 címre"

Főleg ez a legfaszább ötlet, amikor valaki jön, azt hiszi, hogy a tesztrendszeren dolgozik, aztán kiderül, hogy az éles volt.

És akkor következik be ez, nemzetbiztonsági okokból kitakarva: https://drive.google.com/file/d/0BxTJinjfcZ1uTGpmOWZGMks2Y2s/view

:)

szerintem csak megcsuszott aprilis eggyel :D

Ilyet en meg eletemben nem lattam :D

Értem a célzást.

Cél a következő lenne:
http://valami.hu/ --> http://localhost:666/alkalmazas/p?z=111
http://valami.hu/alkalmazas/p?z=111 --> http://localhost:666/alkalmazas/p?z=111
http://valami.hu/alkalmazas/p?z=111:valtozo1:valtozo2 --> http://localhost:666/alkalmazas/p?z=111:valtozo1:valtozo2
http://valami.hu/alkalmazas/p?z=222 --> http://localhost:666/alkalmazas/p?z=111
http://valami.hu/alkalmazas/p?z=222:valtozo1:valtozo2 --> http://localhost:666/alkalmazas/p?z=111 vagy http://valami.hu/alkalmazas/p?z=111:valtozo1:valtozo2

Én már elengedtem. Szerintem engedd el te is :)

--
Gábriel Ákos

Sajnos van az úgy, hogy készen kapsz valamit, aztán oldd meg, ahogy tudod. (Főnököt nem érdekli, fejlesztő meg a vállát vonogatja, kidobni meg nem lehet, ergo irány a gányolás)

Félve kérdezem: egy reverse proxy beállításával+esetleg némi szkripttel megtámogatva sem lehet megoldani?

Amíg lemész kutyába addig le is küldenek.
--
Gábriel Ákos

Vannak helyek és esetek, ahol/amikor nem lehet vagy nem érdemes visszapofázni. (Szakmai elvek vs család fenntartása, hogy csak egy példát említsek)

Talán te még voltál katona. Volt egy mondás, hogy a parancsot megbaszni nem érdemes, mert csak szaporodik. ;)

"Vannak helyek és esetek, ahol/amikor nem lehet vagy nem érdemes visszapofázni."

Igen, vannak ilyen helyek. Ezeket a helyeket nevezzük a szakma pöcegödrének és akik ott dolgoznak, nem szakemberek, hanem senkiháziak, akik éveken át elvannak a langymeleg posványban mindenféle szakmai önérzettől mentesen... és ők azok, akik évekig békésen ülnek a nyakig érő szartengerben és csak akkor óbégatnak keservesen, hogy nyakig ér a szar, amikor az hullámzik.

Túl nagy lett az arcod az elmúlt években...

Ez nem az arcon múlik... dolgoztam ilyen helyen és dolgoztam ilyen emberekkel... sajnos ez a rögvalóság.

...
Mi lenne, ha filozofálás helyett megpróbálnátok valóban segíteni a kérdezőnek?
Weben jártas üzemeltetőnek/programozónak szerintem pár perc gondolkodással összejönne.

(sacc/kb.: PHP szkript, a paramétert átírva továbbítja a kérést a valódi applikációnak/szervernek, megvárja a választ és visszaböfögi a kliensnek - fingom sincs, működik-e így vagy kell bele session management is, mert ha kell, akkor már valószínűleg nem jó)

A fizetését ne vegyem fel a nevében? :)

Bocs, azt hittem, a fórum arra való, hogy segítséget kérjen aki elakad valamiben...

Akkor röviden. Erről az öt sorról megy az agonizálás?

RewriteCond %{QUERY_STRING} ^z=([0-9]+):(.*)$
RewriteRule ^/alkalmazas/p$ /alkalmazas/p?z=111:%2 [NC,L]
RewriteCond %{QUERY_STRING} ^z=([0-9]+)$
RewriteRule ^/alkalmazas/p$ /alkalmazas/p?z=111 [NC,L]
RewriteRule ^/$ /alkalmazas/p?z=111 [NC,L]

Teszt kritériumok:

http://valami.hu/ --> http://localhost:666/alkalmazas/p?z=111

applying pattern '^/alkalmazas/p$' to uri '/'
applying pattern '^/alkalmazas/p$' to uri '/'
applying pattern '^/$' to uri '/'
rewrite '/' -> '/alkalmazas/p?z=111'

PASSED

http://valami.hu/alkalmazas/p?z=111 --> http://localhost:666/alkalmazas/p?z=111

applying pattern '^/alkalmazas/p$' to uri '/alkalmazas/p'
RewriteCond: input='z=111' pattern='^z=([0-9]+):(.*)$' => not-matched
applying pattern '^/alkalmazas/p$' to uri '/alkalmazas/p'
RewriteCond: input='z=111' pattern='^z=([0-9]+)$' => matched
rewrite '/alkalmazas/p' -> '/alkalmazas/p?z=111'

PASSED

http://valami.hu/alkalmazas/p?z=111:valtozo1:valtozo2 --> http://localhost:666/alkalmazas/p?z=111:valtozo1:valtozo2

applying pattern '^/alkalmazas/p$' to uri '/alkalmazas/p'
RewriteCond: input='z=111:x:y:z' pattern='^z=([0-9]+):(.*)$' => matched
rewrite '/alkalmazas/p' -> '/alkalmazas/p?z=111:x:y:z'

PASSED

http://valami.hu/alkalmazas/p?z=222 --> http://localhost:666/alkalmazas/p?z=111

applying pattern '^/alkalmazas/p$' to uri '/alkalmazas/p'
RewriteCond: input='z=222' pattern='^z=([0-9]+):(.*)$' => not-matched
applying pattern '^/alkalmazas/p$' to uri '/alkalmazas/p'
RewriteCond: input='z=222' pattern='^z=([0-9]+)$' => matched
rewrite '/alkalmazas/p' -> '/alkalmazas/p?z=111'

PASSED

http://valami.hu/alkalmazas/p?z=222:valtozo1:valtozo2 --> http://localhost:666/alkalmazas/p?z=111 vagy http://valami.hu/alkalmazas/p?z=111:valtozo1:valtozo2

applying pattern '^/alkalmazas/p$' to uri '/alkalmazas/p'
RewriteCond: input='z=222:x:y:z' pattern='^z=([0-9]+):(.*)$' => matched
rewrite '/alkalmazas/p' -> '/alkalmazas/p?z=111:x:y:z'

PASSED

És most érezzem rosszul magam, hogy hozzájárultam valami fos rendszer további életéhez, aminek már évekkel ezelőtt véget ért az életciklusa, de mert a hülyeség akaraterővel párosul, azért lélegeztetőgépen tartják még pár éven át.

Ja, és ha kell proxy, akkor ez még kell, és az [NC,L] helyett ilyenkor [NC,P] kell:
ProxyPass / http://127.0.0.1:666/
ProxyPassReverse / http://127.0.0.1:666/

ez a PASSED kézzel került oda vagy van valami rewrite rule ellenpőrző toolod? :)

--
Gábriel Ákos

Lófasz van, nem tool... :D

Egy kezemen meg tudom számolni, hogy az utóbbi 10 évben hányszor használtam mod_rewrite modult.

Hát akkor teljes tiszteletem mellett is a megoldás fenntartásokkal kezelendő. :)
--
Gábriel Ákos

Teszteltem is egy élő Apache 2.4-en, mit akarsz még? :)

Semmit :)

--
Gábriel Ákos

Szerintem az agonizálás azon ment, hogy ne így csinálja.
Viszont eddig rajtad kívül azt hiszem, senki sem írta le, hogy ha mégis muszáj így, akkor hogy.
Én leírtam volna, ha tudom, de webszerverekkel majdhogynem nulla dolgom volt.

"Szerintem az agonizálás azon ment, hogy ne így csinálja."

Az agonizálás azon ment, hogy egyáltalán ne csinálja, mert fos az egész és fos is marad, pluszban pedig ezzel behúz egy csomó olyan problémát, ami később nagyon fájdalmas lesz és kurva nehezen lehet akkor már korrigálni.

"Viszont eddig rajtad kívül azt hiszem, senki sem írta le, hogy ha mégis muszáj így, akkor hogy."

Biztos azért van, mert egyedül nekem nagy az arcom.

"Én leírtam volna, ha tudom, de webszerverekkel majdhogynem nulla dolgom volt."

Mondok egy meglepőt: nekem is majdhogynem nulla dolgom volt webszerverekkel, csak tudok doksit olvasni és általában értem is, ami oda le van írva... és ezzel manapság már könnyen a szakma csúcsára lehet emelkedni. :/

:)

És ha nem basztatlak, akkor te sem írod le. :D Egyébként kösz a kérdező nevében is...

Ha te se értesz hozzá, akkor nem is biztos, hogy jó amit írtál :P (azért van egy olyanom, hogy minimum egy nagyságrenddel többet foglalkoztál ilyesmivel még így is, mint én)

Az utolsó mondatoddal sajnos egyet kell értenem, ez már évek óta így van.
Bánatomra, nekem már nem megy az olvasás.
(fórum más téma, de doksit vagy akár logot böngészni már meghaladja a szemem működési tartományát)

En husz eve a "man whatever" miatt vagyok a csucson, keresett mernok :D

Sajnos már csak néhai főnököm mondott egyszer olyat, amikor épp a heti aktuális felmondásomat adtam be, hogy "... te vagy itt az egyik legjobb...". Hmmm...
mondtam neki, hogy lehet, hogy igaza van, de akkor az nagy gáz a cégre nézve.
Erre nem tudott mit mondani. :)
A prog.hu-n, hála a csodás pontrendszernek, php szakértő voltam, pedig sohasem értettem hozzá, még kezdő szinten sem. :)

Köszönöm a segítséget. Bemásoltam amit írtál, de sajnos nem úgy működött, ahogy szerettünk volna. Viszont az iránymutatásod alapján az alábbi beállítással úgy néz ki tökéletesen szuperál:


RewriteRule ^/$ /alkalmazas/p?z=111 [R]
RewriteRule ^/alkalmazas$ /alkalmazas/p?z=111 [R]
RewriteRule ^/alkalmazas/$ /alkalmazas/p?z=111 [R]

RewriteCond %{QUERY_STRING} !^z=111(.*)$
RewriteRule ^/alkalmazas/p$ /alkalmazas/p?z=111 [R]

ProxyPass / http://127.0.0.1:666/
ProxyPassReverse / http://127.0.0.1:666/

Amit írtam, az arra volt jó, amit írtál korábban példákat. Ha nem úgy működik a rendszer, ahogy írtad, akkor gondolatot nem tudok olvasni, hogy miképpen kellene még működnie... :)

Nem azé, hogy izé, de kb. úgy született a unix, meg majd minden utólag hozzárakott alkatrésze, hogy "van itt ez a helyzet: oldd meg - rád van bízva, hogy szakmai önérzettel vagy attól mentesen - keddre".

Egyrészt a lófaszt így született, másrészt kurva nagy különbség van abban, amikor tehetséges emberek gányolnak, mert néha bizony kell, mint amikor tehetségtelen emberek gányolnak, mert csak arra telik a szakmai sütnivalóból.

Van az a szint, ami alá nem megyünk le: ezt a szintet hívják szakmai színvonalnak, és ez a vonal mindenkinél máshol van meghúzva. Ha pedig ez a szint valakinél tartósan alacsony, akkor ne sértődjön meg, ha kimondják, hogy alacsony a szakmai színvonala.

https://www.youtube.com/channel/UC9-y-6csu5WGm29I7JiwpnA

Érdemes mazsolázni benne. Semmiségek mellett olykor ismerős nevű fickók emlékeznek vissza arra, hogy milyen megoldások milyen motivációk mentén születtek.

Adatbázisok logikai és fizikai alapjai, frontendek és backendek, cpu-k és kernelek, végtelen a sor, amit egyszer valaki elcseszett és utána az érdemi javításig mindenki megalázó módon, alapként elfogadva jár körül, es ha nakabbegyíkokénleléptem is lesz a dolog vége: az is egy szakmai önbecsülésféle, hogy az ember azután mondja, hogy megtette, amit lehetett, és kitette az ÉLETVESZÉLY! táblát.

Akkor ugye ez lép életbe: "amikor tehetséges emberek gányolnak, mert néha bizony kell, mint amikor tehetségtelen emberek gányolnak, mert csak arra telik"

Hidd el, téged a kutya nem fog megkérdezni évekkel később, hogy mi vezetett ehhez a gányoláshoz...

Sajnos ez így van. :( Én szerencsére már látom az alagút végén a fényt, viszont amíg ki nem érek addig a vonat utasa vagyok... ;)

Érdekes megvalósítása a branchnek. :)

Sajnos ez van... :)

... jobban megnézve: azért nem, mert az URL a kérdőjel előttig tart.
Utána már változók vannak.

https://stackoverflow.com/questions/17852557/use-rewritecond-based-on-environment-variable-in-htaccess
Az elfogadott választ nézd:

#set to 'live' or 'maintenance'
RewriteRule .* - [E=STATUS:maintenance]

#If the ENVIRONMENT variable is 'maintenance' then show a maintenance page
RewriteCond %{REQUEST_URI} !maintenance.html [NC]
RewriteCond %{ENV:STATUS} ^maintenance$
RewriteRule ^.*$ /maintenance.html [L]

hátha segít...

--
Gábriel Ákos

Vagy a fejlesztőid limitáltan képzettek, ha nem tud teszt.valami.hu-ként működni, vagy a te képességeid felső határa van alacsonyan.
Engedd el a rewrite-ot. Nem erre való.
Fentebb írták, hogy subdomain és virtualhost. Az erre (is) való. ;)

---
"A megoldásra kell koncentrálni nem a problémára."

Lehet mindkettő igaz. :)
Mint azt már gabrielakos írta engedjem el, amit én is szeretnék de sajnos nem lehet. :( Az okokat most nem nagyon taglalnám.

Lépjünk vissza egyet.
Van egy alkalmazás szerverem amit IP-lehet meghívni a következő képen http://IP:port/alkalamzas/p?z=típusa(éles,fejlesztői,teszt):változó:paraméter

A változó és paraméter darabszáma és tartalma az alkalmazás használata közben dinamikusan változik.

A cél, hogy csak az éles alkalmazás legyen kipublikálva a nagyközönség felé és a többi(fejlesztői,teszt) semmilyen formában ne tudják elérni.

Ha magát az alkalmazást nem lehet módosítani, akkor adott pillanatban nem tudod megakadályozni, hogy valaki a végurl ismeretében ahhoz ne forduljon - a redirekt után pedig (bármi csinálja) ismert lesz a végurl.
Hacsak el nem dugod egy privát hálóba az egész szerveredet, amely privát hálóról a paraméterek alapján filterező proxyval/szkripttel adod vissza a kliensnek az eredményedet, HA az éppen engedélyezett típusra mutat a paraméter: aki ismeri az url-eket, az oda fog találni ahová akar vagy nem akar.
Az application layer nem véletlenül kapta a nevét.

Magába az alkalmazásba nem lehet beletenni olyan korlátozást, hogy a fejlesztői/teszt rendszert csak valamilyen IP tartományból érkező kérésre szolgálja ki? (pl. localnet)

--
http://eVIR.hu
Elektronikus Vállalatirányítási Információs Rendszer

Ha IP alapon mész, akkor nyilván subdomain kicsukva.
Viszont a portokkal játszatsz (éles:443;teszt:444;dev:445), és ismét a jól definiálható VirtualHost-nál tartunk,ahol autholhatod a tesztet, és IP korlátot is tehetsz rá.

Az egyetlen dolog, amit el tudok képzelni a rewrite ragaszkodás mellett, az az, hogy az alkalmazás minden linkje, és hivatkozása drótozva van a kódban, és nem kis paraméterecske, vagy változóscska.
Így ha rendesen akarnád csinálni, akkor a fejlesztőknek csillió helyen kéne átírniuk a bedrótozott hivatkozásokat.
Nyugtass meg, hogy nem ilyen rémálomról van szó... :)

---
"A megoldásra kell koncentrálni nem a problémára."

Ha már a portokkal játszik, akkor használhatna mod_proxyt és akár mögé virtuálba is felrakhatja tesztszervert. Véges nagy számú megoldás lehetséges, köztük olyan életveszélyes is, mint a posztban.

Hali,

Ha jól látom Oracle ApEx -rol beszélünk.
Az application builderben az éles rendszer kivételével az összes appnál állítsd be az "Application properties / Definition / Availability"
résznél a státuszt "Unavailable (Redirect to URL)" -re, a message-et pedig "f?p=111" -re.

Ekkor az fog történni, hogy ha a adott app url-jét próbálják browsolni, akkor a 111-es appra fog irányítódni.
Ha jól értettem ez az amit szeretnél.

Üdv,
PaZso

Hát ezt sikerült szépen körülírnia a kérdezőnek, ha igazad van.

ah, zseniális :)
--
Gábriel Ákos

Igen az, bár eddig nem tudtam. Hozzám ez az információ nem jutott el. Esetleg lehet tőled ezzel kapcsolat privátban kérdezni?

Persze. Ha tudok segítek, bár már 8 éve nem dolgozom ApEx-el.