Apache mod_rewrite: directive RewriteMap en utilisant un script PHP sur machine Windows
-
29-09-2019 - |
Question
Cela a été me rend fou. Je ne peux pas sembler obtenir la directive RewriteMap au travail pour un script php sur Windows. Voici l'extrait pertinent de mon fichier httpd.conf:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteMap router "prg:C:/dev/web/www/routing.php"
RewriteRule (.*) ${router:$1}
</IfModule>
Mon simple script php se lit comme ceci:
#!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";
}
?>
Quand je tente de démarrer Apache, je reçois la ligne suivante dans mon journal d'erreur:
[erreur] (OS 193)% 1 ne soit pas valide application Win32. : Mod_rewrite: n'a pas pu démarrer le programme RewriteMap C: /dev/web/www/routing.php Configuration Échec
La documentation apache fait référence au « tour du cookie magique '(sous la « rubrique Programme externe Réécriture ») qui devrait être la première ligne du script qui doit pointer vers l'interprète. Est-ce là où je vais mal ou dois-je appeler différemment la directive RewriteMap?
La solution
Je doute que le tour du cookie magique fonctionnerait sous Windows. Ceci est une fonctionnalité UNIX / Linux.
Vous devrez spécifier l'interpréteur PHP et le script comme argument (voir aussi 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 cela ne fonctionne pas, il peut être à cause de l'espace dans Program Files
. Windows prend en charge un nom court dans de tels cas. Par exemple PROGRA~1
est un nom court typique, mais le chiffre du nom est attribué sur un premier arrivé, premier servi, vous devriez donc une double vérification avec la commande DIR
.
Ou bien vous pouvez déplacer votre exécutable php-win.exe dans un répertoire qui ne contient pas d'espaces.
Si on ne sait pas tout à fait déjà, je dirai ceci:. de Windows suce
Autres conseils
J'ai eu le même problème. Exécutez httpd.exe de CMD, Apache doit montrer l'erreur.