我有一个看似简单的任务,但不知何故我就是无法让它发挥作用:
我的 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]