Usando mod_rewrite para mask / cgi-bin / abc como / def

1

Eu tenho uma tarefa aparentemente fácil, mas de alguma forma eu não consigo trabalhar:

Algumas linhas interessantes do meu 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>

(Eu sei que é burro, mas é apenas uma máquina de testes: D.)

Agora, tenho d:\opt\apache\cgi-bin\expired.pl e espero GET /licensecheck.php?code=123456 . E eu quero fazer o cliente fingir que ele fala com /licensecheck.php , mas na verdade retorna dados em \expired.pl .

O que tentei foi definir o seguinte no final de http.conf :

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

... mas ele continua me 404, procurando por cgi-bin diretório (não cgi-bin \ expired.pl) no meu DocumentRoot!

[error] [client 127.0.0.1] script not found or unable to stat: D:/opt/apache/htdocs/cgi-bin
  • /cgi-bin/expired.pl e todos os outros scripts em / cgi-bin / funcionam como esperado,

  • A única maneira que eu consegui fazer isso foi colocar o \expired.pl no DocumentRoot, mas eu não quero isso, eu quero o meu cgi-bin bem separado:)

por Alois Mahdal 12.07.2011 / 17:43

1 resposta

3

O problema foi apenas um mal-entendido; Eu pensei que o assunto para reescrever é implicitamente tomado como URI.

A adição de [PT] mudou o comportamento, o que resolveu meu problema:

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