Apache mod_rewrite: директива RewriteMap, использующая скрипт PHP на компьютере с Windows - PullRequest
6 голосов
/ 19 августа 2010

Это сводит меня с ума. Я не могу заставить директиву RewriteMap работать для сценария php на windows. Вот соответствующий фрагмент из моего файла 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, в журнале ошибок появляется следующая строка:

[ошибка] (ОС 193)% 1 недопустимо Приложение Win32. : mod_rewrite: не удалось запустить программу RewriteMap C: /dev/web/www/routing.php Ошибка конфигурации

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

Ответы [ 2 ]

6 голосов
/ 19 августа 2010

Я сомневаюсь, что трюк с волшебным печеньем сработает в 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 сосет .

0 голосов
/ 16 апреля 2011

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

...