У меня вроде бы простая задача, но почему-то я просто не могу заставить ее работать:
Несколько интересных строк из моего 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 был аккуратно отделен :)
Проблема заключалась в недоразумении; Я думал, что предмет для перезаписи неявно берется как URI.
Добавление [PT]
изменил поведение, которое решило мою проблему:
RewriteRule ^/licensecheck.php$ /cgi-bin/pct-expired.pl [T=application/x-httpd-cgi,L,PT]