【问题标题】:Apache mod_rewrite: RewriteMap directive using PHP script on Windows machineApache mod_rewrite:在 Windows 机器上使用 PHP 脚本的 RewriteMap 指令
【发布时间】:2023-03-19 05:20:02
【问题描述】:

这让我发疯了。我似乎无法让 RewriteMap 指令适用于 Windows 上的 php 脚本。这是我的 httpd.conf 文件中的相关 sn-p:

<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 指的是“神奇的 cookie 技巧”(在“外部重写程序”标题下),它应该是指向解释器的脚本的第一行。这是我出错的地方还是我需要以不同的方式调用 RewriteMap 指令?

【问题讨论】:

    标签: php windows apache mod-rewrite rewritemap


    【解决方案1】:

    我怀疑神奇的 cookie 技巧(也称为 shebang)是否适用于 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) apr_proc_create 中的评论(用于调用程序)还请注意:progname 必须以原始格式不加引号,因为 NT 中存在各种错误库加载器代码在解析'/'时出错,但我不确定它实际上有多大问题。看起来该命令稍后也会自动引用(根据需要),所以希望空格不应该成为问题。
    • @Tim:谢谢!无论如何,这些空间是需要注意的,因为它们会在各种情况下咬你。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 2010-11-02
      • 2011-10-05
      • 1970-01-01
      • 1970-01-01
      • 2012-04-03
      相关资源
      最近更新 更多