situatie
Ik heb hier een klein testservertje staan dat via een rewritemap virtualhosts dynamisch simuleert.
Als er bijvoorbeeld www.tweakers.lan/pagina.php opvraag, wordt er in de db gekeken waar het bijbehorende bestand staat, en wordt de absolute padnaam teruggegeven.
Dit loopt via een php-cgi script (stdin en stdout).
in mijn rewrite.conf (geincludeerd in httpd.conf) staat:
De functie getWebroot retourneert de webroot van de betreffende domeinnaam, indien de domeinnaam onbekend is, retourneert 'ie NULL. Ik heb door uitgebreid testen en loggen kunnen vaststellen dat die functie correct is.
probleem
Als ik snel achter elkaar pagina's opvraag (dit geldt ook voor gif-jes en zo) dan gaat apache fouten maken: hij verwart de pagina's met elkaar. In plaats van index.php krijg ik dan image.gif terug (overigens inclusief correcte mime-types).
wat is het niet?
Mijn leesbuffer is niet te klein. (1<<14 is best groot
)
getWebRoot() is correct. Daar ben ik absoluut zeker van.
vermoedens
Ik vermoed dat apache de requests niet in dezelfde volgorde uitleest als dat 'ie ze schrijft.
Wie heeft hier ervaring mee, en weet de oplossing?
Ik heb hier een klein testservertje staan dat via een rewritemap virtualhosts dynamisch simuleert.
Als er bijvoorbeeld www.tweakers.lan/pagina.php opvraag, wordt er in de db gekeken waar het bijbehorende bestand staat, en wordt de absolute padnaam teruggegeven.
Dit loopt via een php-cgi script (stdin en stdout).
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| #!/usr/bin/php4 -q <? include('config.php'); $input = fopen("php://stdin",'r'); while($line = trim(fgets($input, 1 << 14 ))) { preg_match('/^\(([a-z0-9\.\-]*)(:\d+)?\)(.*)/',$line,$mt); $domainname = $mt[1]; $port = $mt[2]; $filename = $mt[3]; $domain = getWebroot($domainname); if(is_null($domain)) { $result = http404_file; } else { $result = "$domain$filename"; } echo $result , "\n"; flush(); } [...] |
in mijn rewrite.conf (geincludeerd in httpd.conf) staat:
code:
1
2
3
| RewriteEngine on RewriteMap domain-map prg:/etc/apache/rewrite/translatedomain.php RewriteRule ^(.*)$ ${domain-map:(%{HTTP_HOST})$1} [L] |
De functie getWebroot retourneert de webroot van de betreffende domeinnaam, indien de domeinnaam onbekend is, retourneert 'ie NULL. Ik heb door uitgebreid testen en loggen kunnen vaststellen dat die functie correct is.
probleem
Als ik snel achter elkaar pagina's opvraag (dit geldt ook voor gif-jes en zo) dan gaat apache fouten maken: hij verwart de pagina's met elkaar. In plaats van index.php krijg ik dan image.gif terug (overigens inclusief correcte mime-types).
wat is het niet?
Mijn leesbuffer is niet te klein. (1<<14 is best groot
getWebRoot() is correct. Daar ben ik absoluut zeker van.
vermoedens
Ik vermoed dat apache de requests niet in dezelfde volgorde uitleest als dat 'ie ze schrijft.
Wie heeft hier ervaring mee, en weet de oplossing?
Localhost, sweet localhost