Назад | Перейти на главную страницу

Использование 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

Проблема заключалась в недоразумении; Я думал, что предмет для перезаписи неявно берется как URI.

Добавление [PT] изменил поведение, которое решило мою проблему:

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