Apache mod_rewrite: директива RewriteMap с использованием PHP-скрипта на Windows-машине

Это сводило меня с ума. Кажется, я не могу заставить директиву RewriteMap работать на php-скрипт в окнах. Вот соответствующий фрагмент из моего файла httpd.conf:

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

Мой простой скрипт php выглядит следующим образом:

 #!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"; } ?> 

Когда я пытаюсь запустить Apache, я получаю следующую строку в своем журнале ошибок:

[error] (OS 193)% 1 не является допустимым приложением Win32. : mod_rewrite: не удалось запустить программу RewriteMap C: /dev/web/www/routing.php Не удалось выполнить конфигурацию

Документация apache относится к «волшебному трюку cookie» (под заголовком «Внешняя перезаписывающая программа»), который должен быть первой строкой сценария, которая должна указывать на интерпретатор. Это где я ошибаюсь или мне нужно вызвать директиву RewriteMap по-другому?

Я сомневаюсь, что волшебный трюк cookie будет работать на Windows. Это функция UNIX / Linux.

Вы должны указать интерпретатор PHP и скрипт в качестве аргумента (см. Также 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" 

Если это не работает, возможно, это связано с пространством в Program Files . В таких случаях Windows поддерживает короткое имя. Например, PROGRA~1 является типичным коротким именем, но цифра в названии назначается по принципу «первым пришел первым», поэтому вам следует дважды проверить команду DIR .

Или вы можете переместить исполняемый файл php-win.exe в каталог, который не содержит пробелов.

Если это еще не совсем ясно, я скажу так: Windows отстой .

У меня была схожая проблема. Запустите httpd.exe из CMD, Apache должен показать ошибку.