Это сводило меня с ума. Кажется, я не могу заставить директиву 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 должен показать ошибку.