Apache mod_rewrite:在Windows机器上使用PHP脚本的RewriteMap指令

时间:2010-08-18 20:01:39

标签: php windows apache mod-rewrite rewritemap

这让我疯了。我似乎无法让RewriteMap指令适用于Windows上的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时,我在错误日志中得到以下行:

  

[错误](OS 193)%1无效   Win32应用程序。 :mod_rewrite:   无法启动RewriteMap程序   C:/dev/web/www/routing.php   配置失败

The apache documentation指的是“魔术饼干技巧”(在“外部重写程序”标题下),它应该是应该指向解释器的脚本的第一行。这是我出错的地方还是需要以不同的方式调用RewriteMap指令?

2 个答案:

答案 0 :(得分: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糟透了

答案 1 :(得分:0)

我有类似的问题。从CMD运行httpd.exe,Apache应该显示错误。