Não parece conseguir mod_rewrite para definir uma variável de ambiente

1

Isso é simplesmente estranho.

Eu coloquei o seguinte em um arquivo .htaccess :

RewriteRule ^a-file-on-the-server$ index.php [E=let_me_in:test]

E no meu script PHP, tenho o seguinte:

print_r($_ENV);

... que imprime todas as variáveis de ambiente.

Quando vou para mydomain.com/a-file-on-the-server , obtenho a saída:

Array
(
    [DOCUMENT_ROOT] => ********
    [GATEWAY_INTERFACE] => CGI/1.1
    [HTTP_ACCEPT] => application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
    [HTTP_ACCEPT_CHARSET] => ISO-8859-1,utf-8;q=0.7,*;q=0.3
    [HTTP_ACCEPT_ENCODING] => gzip,deflate,sdch
    [HTTP_ACCEPT_LANGUAGE] => en-US,en;q=0.8
    [HTTP_CACHE_CONTROL] => max-age=0
    [HTTP_CONNECTION] => keep-alive
    [HTTP_COOKIE] => ********
    [HTTP_HOST] => ********
    [HTTP_USER_AGENT] => Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.99 Safari/533.4
    [PATH] => /bin:/usr/bin
    [QUERY_STRING] => 
    [REDIRECT_STATUS] => 200
    [REMOTE_ADDR] => ********
    [REMOTE_PORT] => 36345
    [REQUEST_METHOD] => GET
    [REQUEST_URI] => ********
    [SCRIPT_FILENAME] => ********
    [SCRIPT_NAME] => ********
    [SERVER_ADDR] => ********
    [SERVER_ADMIN] => ********
    [SERVER_NAME] => ********
    [SERVER_PORT] => 80
    [SERVER_PROTOCOL] => HTTP/1.1
    [SERVER_SIGNATURE] => 
    [SERVER_SOFTWARE] => Apache
    [UNIQUE_ID] => ********
)

Como você pode ver, a variável de ambiente não está aparecendo. O que estou fazendo errado?

    
por Nathan Osman 05.08.2010 / 02:35

3 respostas

1

A única coisa que parece errada é o regex que você está usando. Lembre-se de que a regex corresponde a todo o URI de solicitação, que sempre começa com / . Do jeito que você escreveu, só vai coincidir se a solicitação começar com a-file... , o que nunca será o caso.

Tente usar isso em vez disso (adicionei apenas um / após o ^ ):

RewriteRule ^/a-file-on-the-server$ index.php [E=let_me_in:test]

Pode haver outras partes de sua regra que não estão certas, mas eu não tenho muita experiência com vars de ambiente.

    
por 06.12.2010 / 16:54
0

ei estou fazendo algum teste e ao configurar env var,

Eu faço o que você gosta [E = variável: valor, outro sinalizador / valor, (..)]

e no meu arquivo php eu vejo essas configurações de cuba em $ _SERVER ['variable']

você pode querer ter seu var assim:

echo $ _SERVER ['let_me_in'];

teste de saída shoult.

    
por 15.09.2010 / 21:40
0

Eu me deparei com esse problema hoje fazendo algum trabalho mod_rewrite do Apache. A questão é que o PHP coloca a variável de ambiente definida como parte da regra de reescrita em $ _SERVER, não em $ _ENV (e ele muta o nome do env var).

Incluindo um RewriteRule como

RewriteRule ^a-file-on-the-server$ index.php [E=let_me_in:test]

na minha configuração (CentOS6 com Apache 2.2.15 e PHP 5.3.3), irá fornecer a variável como $ _SERVER ['REDIRECT_LET_ME_IN'], tal que index.php com o conteúdo:

<?php
   print_r($_SERVER['REDIRECT_LET_ME_IN']);
?>

mostraria o texto:

test

Eu usei a chamada de função phpinfo () para investigar esse problema e recomendá-lo para visualizar todos os pares de chave / valor $ _ENV e $ _SERVER disponíveis durante a depuração.

    
por 10.08.2017 / 07:25