Apache / rewrite met internal redirect

Pagina: 1
Acties:

Vraag


Acties:
  • +1 Henk 'm!

  • Sircuri
  • Registratie: Oktober 2001
  • Niet online

Sircuri

Volledig Appelig

Topicstarter
Situatie schets:

Een solar inverter van het merk GoodWe is enkel in staat te communiceren over HTTP / Wireless met een server in China. Ik wil dit graag binnen mijn eigen muren afhandelen. Eerste instantie geprobeerd om dit te doen via de USB poort onderaan het apparaat. Helaas no luck.
Als alternatief heb ik nu een Raspberry Zero ingericht als Wireless AP en daarmee de inverter laten verbinden. Nu loopt dus al het verkeer van de omvormer via de raspberry. Bingo.. Middels iptables zorg ik er nu voor dat al het verkeer vanaf de omvormer wordt doorgestuurd naar het lokale ip-adres van de raspberry.
Nu is het idee om al de communicatie van de omvormer af te laten handelen door een PHP script op de webserver op de raspberry. Daar ontstaat het probleem. De HTTP client van omvormer is een zeer eenvoudige implementatie kennelijk, want een HTTP-code 301 snapt de omvormer niet.

De omvormer doet altijd een POST naar http://www.goodwe-power.com/Acceptor/Datalog. Door de ip-tables aanpassing zie ik netjes in de logs van Apache dat er elke 10 seconde een verzoek binnenkomt voor URL /Acceptor/Datalog. Dus dat stuk werkt. Ik heb daarop dus een RewriteRule gemaakt in .htaccess om het verzoek naar /Acceptor/Datalog te laten doorsturen naar /Acceptor/Datalog/index.php.
Echter wat ik ook probeer, Apache blijft een 301 sturen naar /Acceptor/Datalog/. De omvormer snapt dit echter niet en daar loopt de communicatie met de omvormer dus dood.

Ik doe iets fout in de .htaccess, maar krijg het niet voor elkaar om dit correct op te zetten. Zover ik weet moet je een internal redirect kunnen doen, maar Apache lijkt alles als External Redirect te beschouwen.

Wie zou me kunnen helpen om .htaccess correct te krijgen?

Omdat index.php een default document is, had ik gehoopt dat het wat eenvoudiger zou zijn. Dit bleek niet uit te maken, dus doe ik het volgende:

Middels onderstaande rewrite probeer ik /Acceptor/Datalog te laten wijzen naar /Acceptor/Datalog.php. Resultaat: 404. Dus deze is niet goed.
code:
1
2
3
Options +MultiViews
RewriteEngine On
RewriteRule Datalog Datalog.php [L]


Deze ook geprobeerd door elk verzoek door Apache de .php extensie achter te laten zetten. Dus /Acceptor/Datalog zou dan /Acceptor/Datalog.php moeten worden. Ook geen succes.

code:
1
2
3
4
Options +MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*?)/?$ /$1.php [NC,L]


De error log toont het volgende:

code:
1
2
3
d#b62b2058/subreq] [perdir /var/www/html/] applying pattern '^(.*?)/?$' to uri 'Acceptor/Datalog.php'
[Sun Jun 11 18:03:17.450946 2017] [rewrite:trace2] [pid 9657] mod_rewrite.c(475): [client 192.168.50.64:55091] 192.168.50.64 - - [www.goodwe-power.com/sid#b5937e30][rid#b62b2058/subreq] [perdir /var/www/html/] rewrite 'Acceptor/Datalog.php' -> '/Acceptor/Datalog.php.php'
[Sun Jun 11 18:03:17.452261 2017] [rewrite:trace1] [pid 9657] mod_rewrite.c(475): [client 192.168.50.64:55091] 192.168.50.64 - - [www.goodwe-power.com/sid#b5937e30][rid#b62b2058/subreq] [perdir /var/www/html/] internal redirect with /Acceptor/Datalog.php.php [INTERNAL REDIRECT]


Dus de internal redirect stuk werkt, maar ik snap niet waarom apache probeert om url '/Acceptor/Datalog.php.php' te openen. Wat doe ik niet goed.

Signature van nature

Beste antwoord (via Sircuri op 11-06-2017 20:42)


  • Thralas
  • Registratie: December 2002
  • Laatst online: 08:10
Sircuri schreef op zondag 11 juni 2017 @ 18:05:
Middels onderstaande rewrite probeer ik /Acceptor/Datalog te laten wijzen naar /Acceptor/Datalog.php. Resultaat: 404. Dus deze is niet goed.
code:
1
2
3
Options +MultiViews
RewriteEngine On
RewriteRule Datalog Datalog.php [L]
De pattern is slechts een match rule, hij vervangt vervolgens het hele path. Ik heb het idee dat je dat niet doorhad toen je die rule tikte.
Dus de internal redirect stuk werkt, maar ik snap niet waarom apache probeert om url '/Acceptor/Datalog.php.php' te openen. Wat doe ik niet goed.
Hier herscrhijf je volgens mij expliciet .php (door de RewriteCond) naar .php.php..

Volgens mij zijn er duizend-en-een manieren om dit op te lossen, maar wat was er mis met de meest simpele oplossing?

code:
1
RewriteRule ^/Acceptor/Datalog$ /datalog.php [L]

Alle reacties


Acties:
  • 0 Henk 'm!

  • Blokker_1999
  • Registratie: Februari 2003
  • Laatst online: 09:50

Blokker_1999

Full steam ahead

Ik snap niet goed waarom je een rewrite wil doen. Als de inverter het adres met subdir Acceptor/Datalog opvraagt en jij hebt daar een correcte index pagina staan dan moet je webserver gewoon die pagina server. Daar is geen enkele rewrite of redirect voor nodig. Geef de client gewoon waar deze om vraagt op de eenvoudigste manier die je kan bedenken.

No keyboard detected. Press F1 to continue.


Acties:
  • 0 Henk 'm!

  • Sircuri
  • Registratie: Oktober 2001
  • Niet online

Sircuri

Volledig Appelig

Topicstarter
Zonder config doet Apache een redirect van /Acceptor/Datalog naar /Acceptor/Datalog/ (zie de extra slash).

Volgens mij snap ik niet helemaal wat je bedoelt... sorry.

Signature van nature


Acties:
  • Beste antwoord
  • +1 Henk 'm!

  • Thralas
  • Registratie: December 2002
  • Laatst online: 08:10
Sircuri schreef op zondag 11 juni 2017 @ 18:05:
Middels onderstaande rewrite probeer ik /Acceptor/Datalog te laten wijzen naar /Acceptor/Datalog.php. Resultaat: 404. Dus deze is niet goed.
code:
1
2
3
Options +MultiViews
RewriteEngine On
RewriteRule Datalog Datalog.php [L]
De pattern is slechts een match rule, hij vervangt vervolgens het hele path. Ik heb het idee dat je dat niet doorhad toen je die rule tikte.
Dus de internal redirect stuk werkt, maar ik snap niet waarom apache probeert om url '/Acceptor/Datalog.php.php' te openen. Wat doe ik niet goed.
Hier herscrhijf je volgens mij expliciet .php (door de RewriteCond) naar .php.php..

Volgens mij zijn er duizend-en-een manieren om dit op te lossen, maar wat was er mis met de meest simpele oplossing?

code:
1
RewriteRule ^/Acceptor/Datalog$ /datalog.php [L]

Acties:
  • 0 Henk 'm!

  • Sircuri
  • Registratie: Oktober 2001
  • Niet online

Sircuri

Volledig Appelig

Topicstarter
Thralas schreef op zondag 11 juni 2017 @ 19:36:

Volgens mij zijn er duizend-en-een manieren om dit op te lossen, maar wat was er mis met de meest simpele oplossing?

code:
1
RewriteRule ^/Acceptor/Datalog$ /datalog.php [L]
Tja, het zijn juist de meest eenvoudige oplossingen die ik niet aan de praat krijg. Snap er werkelijk helemaal niets van. Er is in de log ook geen enkel bewijs dat de redirect naar /datalog.php plaatsvindt. Ik krijg dus ook steeds een 404 error op de url /Acceptor/Datalog.

code:
1
2
3
[Sun Jun 11 20:29:16.435045 2017] [rewrite:trace3] [pid 2520] mod_rewrite.c(475): [client 192.168.50.64:29012] 192.168.50.64 - - [www.goodwe-power.com/sid#b5911e30][rid#b628e058/initial] [perdir /var/www/html/] strip per-dir prefix: /var/www/html/Acceptor/Datalog -> Acceptor/Datalog
[Sun Jun 11 20:29:16.445832 2017] [rewrite:trace3] [pid 2520] mod_rewrite.c(475): [client 192.168.50.64:29012] 192.168.50.64 - - [www.goodwe-power.com/sid#b5911e30][rid#b628e058/initial] [perdir /var/www/html/] applying pattern '^/Acceptor/Datalog$' to uri 'Acceptor/Datalog'
[Sun Jun 11 20:29:16.446063 2017] [rewrite:trace1] [pid 2520] mod_rewrite.c(475): [client 192.168.50.64:29012] 192.168.50.64 - - [www.goodwe-power.com/sid#b5911e30][rid#b628e058/initial] [perdir /var/www/html/] pass through /var/www/html/Acceptor/Datalog


.htaccess
code:
1
2
RewriteEngine On
RewriteRule "^/Acceptor/Datalog$" "/datalog.php"


Bedankt voor je input overigens.

Update:

Nu ik nog eens keek naar de trace log zie ik de fout al staan:
code:
1
[perdir /var/www/html/] applying pattern '^/Acceptor/Datalog$' to uri 'Acceptor/Datalog'


Ik heb nu de .htaccess aangepast door de eerste / van de pattern weg te laten. Nu werkt het! (en natuurlijk de [L] toegevoegd om de rules te laten eindigen.)
code:
1
RewriteRule "^Acceptor/Datalog$" "/index.php" [L]

[ Voor 11% gewijzigd door Sircuri op 11-06-2017 20:42 ]

Signature van nature


Acties:
  • 0 Henk 'm!

  • Thralas
  • Registratie: December 2002
  • Laatst online: 08:10
Sircuri schreef op zondag 11 juni 2017 @ 20:34:
Tja, het zijn juist de meest eenvoudige oplossingen die ik niet aan de praat krijg.
Bekend probleem :+

Dat met die slash komt doordat je directive in een directory context gebruikt wordt (namelijk: .htaccess).

Als je hem onafhankelijk van de directory instelt (VirtualHost context) mag dat wel. Lijkt iets netter, al schiet je daar niet heel veel mee op, het daadwerkelijke script is immers alsnog afhankelijk van een directory.
Pagina: 1