使用 mod_rewrite 将 /cgi-bin/abc 屏蔽为 /def

使用 mod_rewrite 将 /cgi-bin/abc 屏蔽为 /def

我有一个看似简单的任务,但不知何故我就是无法让它发挥作用:

我的 httpd.conf 中有几行有趣的内容:

...
DocumentRoot "D:/opt/apache/htdocs"
...
ScriptAlias /cgi-bin/ "D:/opt/apache/cgi-bin/"
...
<Directory "D:/opt/apache/htdocs">
   Options Indexes FollowSymLinks ExecCGI
   AllowOverride None
   Order allow,deny
   Allow from all
</Directory>
<Directory "D:/opt/apache/cgi-bin/">
    AllowOverride None
    Options ExecCGI
    Order allow,deny
    Allow from all
</Directory>

(我知道这很蠢但它只是一台测试机器:D。)

现在,我有了d:\opt\apache\cgi-bin\expired.pl,并且我期望GET /licensecheck.php?code=123456。我希望让客户端误以为它与 对话/licensecheck.php,但实际上通过 返回数据\expired.pl

我尝试在末尾设置以下内容http.conf

RewriteEngine on
RewriteRule ^/licensecheck.php$ /cgi-bin/expired.pl [T=application/x-httpd-cgi,L]

...但它总是给我 404 错误,正在查找 cgi-bin目录(不是 cgi-bin\expired.pl)在我的 DocumentRoot 中!

[error] [client 127.0.0.1] script not found or unable to stat: D:/opt/apache/htdocs/cgi-bin
  • /cgi-bin/expired.pl 和 /cgi-bin/ 中的所有其他脚本均按预期工作,

  • 我能让它工作的唯一方法实际上是将其\expired.pl放入 DocumentRoot,但我不想这样,我希望我的 cgi-bin 整齐地分开:)

答案1

这个问题只是一个误解;我以为重写的主题被隐式地视为 URI。

添加[PT]改变了行为,解决了我的问题:

RewriteRule ^/licensecheck.php$ /cgi-bin/pct-expired.pl [T=application/x-httpd-cgi,L,PT]

相关内容