这让我发疯了。我似乎无法让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配置失败

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

有帮助吗?

解决方案

我怀疑魔术饼干技巧是否可以在窗户上起作用。这是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执行移动到不包含空格的目录。

如果还没有完全清楚,我会这么说: 窗户很烂.

其他提示

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top