Apache mod_rewrite: Directiva RewriteMap utilizando script PHP en la máquina de Windows
-
29-09-2019 - |
Pregunta
Esto me ha estado volviendo loco. Me parece que no puede obtener la Directiva RewriteMap de trabajo para un script PHP en Windows. Aquí está el fragmento relevante de mi archivo httpd.conf:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteMap router "prg:C:/dev/web/www/routing.php"
RewriteRule (.*) ${router:$1}
</IfModule>
Mi simple script php se lee como sigue:
#!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 consigo la siguiente línea en mi registro de errores:
[error] (OS 193)% 1 no es un válido aplicación Win32. : Mod_rewrite: no se pudo iniciar el programa RewriteMap C: /dev/web/www/routing.php Error de configuración
la documentación de Apache se refiere al 'truco cookie mágica '(bajo el 'título Programa de reescritura externa'), que debe ser la primera línea del script que debe apuntar a la intérprete. ¿Es aquí donde estoy haciendo mal o tengo que llamar a la directiva RewriteMap de manera diferente?
Solución
dudo el truco cookie mágica funcionaría en Windows. Esta es una característica de UNIX / Linux.
Se tendrá 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 esto no funciona, puede ser debido al espacio en Program Files
. Windows es compatible con un nombre corto en estos casos. Por ejemplo PROGRA~1
es un nombre típico corto, pero el dígito en el nombre se asigna en un primer orden de solicitud, por lo que debe vuelva a comprobar con el comando DIR
.
O de lo contrario se podría mover el ejecutable php-win.exe a un directorio que no contenga espacios.
Si no está totalmente claro ya, voy a decir esto:. Windows chupa
Otros consejos
he tenido un problema similar. Ejecutar httpd.exe de CMD, Apache debe mostrar error.