Meu objetivo original era reescrever as solicitações para http://server.com/node/XXXXX
para http://server.com/node/index.cgi?XXXXX
. node
é realmente um diretório físico contendo index.cgi
, localizado diretamente sob a raiz do documento. Esse bit é bastante simples:
AddHandler cgi-script .cgi
Options +FollowSymLinks +ExecCGI
RewriteEngine On
RewriteBase /node
RewriteCond %{REQUEST_FILENAME} !index.cgi
RewriteRule ^(.*)$ /node/index.cgi?$1 [L,QSA]
... no arquivo .htaccess
em /real/path/to/web/stuff/node
.
Observe que isso significa que as solicitações do formulário http://server.com/node/
fornecem uma string de consulta vazia para index.cgi
, que é o que eu quero.
Agora, a parte complicada: eu quero que os pedidos para http://server.com/node
redirecionem para http://server.com/node/
- que, como acima, redireciona para index.cgi
com um QS vazio. O problema é que, se eu não tiver regras no diretório raiz, uma solicitação para http://server.com/node
parece ir para http://server.com/node/
- mas descubro que a string de consulta dada a index.cgi
é o caminho físico completo correspondente ao pedido ( /real/path/to/web/stuff/node
)!
Eu tentei uma regra no meu nível raiz .htaccess
como:
RewriteCond %{REQUEST_URI} =/node
RewriteRule ^(.*)$ /node/ [L] # (also tried [L,R=302])
Mas isso não tem efeito.
Eu percebo que o Apache faz alguns acréscimos diretos, mas eu não posso usar DirectorySlash Off
... e eu não gostaria, se eu pudesse, já que eu tenho uma instalação do Drupal que reside na raiz (existem várias regras de reescrita semelhantes lá, mas eu não acho que elas estejam interferindo).
Então, é possível criar uma regra para o diretório raiz .htaccess
que funciona ou modificar o /node/.htaccess
para que isso não importe? Mesmo movimentar as coisas fisicamente não está além da razão.
Isto está em um host rodando o Apache 1.3.41 no FreeBSD 7.3. Eu não tenho a capacidade de alterar nada sobre a configuração do servidor em si, apenas meus arquivos .htaccess
(o que significa que eu não posso nem mesmo ativar o reescrito de log!).