6

これは私を狂気に駆り立てています。Windows 上の php スクリプトで RewriteMap ディレクティブを機能させることができないようです。これは、私の 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 を起動しようとすると、エラー ログに次の行が表示されます。

[エラー] (OS 193)%1 は有効な Win32 アプリケーションではありません。: mod_rewrite: RewriteMap プログラムを開始できませんでした C:/dev/web/www/routing.php 設定に失敗しました

apache のドキュメントでは、インタープリターを指すスクリプトの最初の行である「マジック クッキー トリック」(「外部書き換えプログラム」という見出しの下) について言及しています。これは私が間違っているところですか、それとも RewriteMap ディレクティブを別の方法で呼び出す必要がありますか?

4

2 に答える 2

6

シバンとも呼ばれる魔法のクッキーのトリックが 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 は最悪です。

于 2010-08-18T20:24:24.530 に答える
0

同様の問題がありました。CMD から httpd.exe を実行すると、Apache でエラーが表示されるはずです。

于 2011-04-16T15:23:47.343 に答える