A solicitação do Apache contém caminho físico completo quando a barra final é omitida

1

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!).

    
por detly 25.01.2011 / 12:32

1 resposta

1

A documentação do Apache 1.3 tem uma entrada referente ao "problema de barra final" , talvez pode ajudá-lo nesse cenário.

Em relação às suas regras com os IDs de nós, o RewriteBase talvez seja seu problema, já que "o prefixo do diretório local é removido e suas regras de reescrita agem apenas no restante", conforme documentado em the RewriteBase docs .

    
por 25.01.2011 / 13:32