php - Apache mod_rewrite : RewriteMap directive using PHP script on Windows machine

标签 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 时,我在错误日志中收到以下行:

[error] (OS 193)%1 is not a valid Win32 application. : mod_rewrite: could not start RewriteMap program C:/dev/web/www/routing.php Configuration Failed

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

最佳答案

我怀疑神奇的 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 糟透了

关于php - Apache mod_rewrite : RewriteMap directive using PHP script on Windows machine,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3516188/

相关文章:

c++ - 在 C++ DLL 中使用全局变量

C#: 无法从程序集中加载类型

apache - 大规模 URL 更改

php - "Your PHP installation appears to be missing the MySQL extension which is required by WordPress."

java - 在 apache karaf 中安装时,apache camel 在 bundle 中 Unresolved 约束

php - Imagick 3 writeImages() 函数不工作

php - 调用创建付款时出现 MALFORMED_REQUEST

Windows 的 C 编译器?

phpmyadmin 显示有关 utf8mb 的错误

javascript - 在 Bootstrap 中折叠标签