我有一个看起来很容易的任务,但不知何故,我不能得到它的工作:
我的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>
(我知道这是愚蠢的,但它只是一个testing机器:D。)
现在,我有d:\opt\apache\cgi-bin\expired.pl ,我期望GET /licensecheck.php?code=123456 。 我希望让客户认为它使用/licensecheck.php ,但实际上通过\expired.pl返回数据。
我所尝试的是在http.conf的末尾设置以下http.conf :
RewriteEngine on RewriteRule ^/licensecheck.php$ /cgi-bin/expired.pl [T=application/x-httpd-cgi,L]
…但它保持404我,在我的DocumentRoot中寻找cgi-bin 目录 (不是cgi-bin \ expired.pl)!
[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整齐地分开:)
问题只是一个误解, 我认为重写的主题隐含地作为URI。
添加[PT]改变了行为,解决了我的问题:
RewriteRule ^/licensecheck.php$ /cgi-bin/pct-expired.pl [T=application/x-httpd-cgi,L,PT]