2010-08-18 19 views
6

Esto me ha estado volviendo loco. Parece que no puedo obtener la directiva RewriteMap para trabajar con un script php en Windows. Aquí está el fragmento relevante de mi archivo httpd.conf:Apache mod_rewrite: directiva RewriteMap utilizando script PHP en Windows máquina

<IfModule mod_rewrite.c> 
     RewriteEngine on 
     RewriteMap router "prg:C:/dev/web/www/routing.php" 
     RewriteRule (.*) ${router:$1} 
</IfModule> 

Mi simple script php dice así:

#!C:\Program Files\PHP5.3.2\php-win.exe 
<?php 

set_time_limit(0); # forever program! 
$keyboard = fopen("php://stdin","r"); 
while (1) { 
     $line = trim(fgets($keyboard)); 
     echo "/sandbox.php?url=$line"; 
     echo "\n"; 
} 
?> 

Cuando intento iniciar Apache tengo la siguiente línea en mi registro de errores:

[error] (OS 193)% 1 no es una aplicación válida Win32. : Mod_rewrite: No se pudo iniciar el programa RewriteMap C: /dev/web/www/routing.php configuración con anomalías

The apache documentation se refiere a la 'cookie truco de magia' (bajo el encabezado "Programa de reescritura Externo) que debería ser la primera línea del script que debe apuntar al intérprete. ¿Esto es donde me estoy equivocando o necesito llamar a la directiva RewriteMap de manera diferente?

Respuesta

6

Dudo que el truco mágico de las cookies funcione en Windows. Esta es una característica de UNIX/Linux.

Vas a tener que especificar el intérprete de PHP y el guión como argumento (véase también http://www.webmasterworld.com/forum92/859.htm):

RewriteMap router "prg:C:/Program Files/PHP5.3.2/php-win.exe C:/dev/web/www/routing.php" 

Si eso no funciona, puede ser debido al espacio en Program Files. Windows admite un nombre corto en tales casos. Por ejemplo, PROGRA~1 es un nombre corto típico, pero el dígito en el nombre se asigna por orden de llegada, por lo que debe verificarlo dos veces con el comando DIR.

O bien podría mover su ejecutable php-win.exe a un directorio que no contiene espacios.

Si no está del todo claro, diré esto: Windows es una mierda.

+0

(+1) Los comentarios en 'apr_proc_create' (usado para invocar el programa) también toman nota: * progname debe ser sin comillas, en formato nativo, ya que hay todo tipo de errores en el código del cargador de biblioteca NT que falla al analizar '/' *, aunque no estoy seguro de cuán grave es en realidad. Parece que el comando también se cita automáticamente más tarde (según sea necesario), así que con suerte los espacios no deberían ser un problema. –

+0

@Tim: ¡Gracias! De todos modos, los espacios son algo a tener en cuenta porque te pueden morder en diversas circunstancias. –

0

Tuve un problema similar. Ejecute httpd.exe desde CMD, Apache debería mostrar un error.

Cuestiones relacionadas