RewriteCond sempre corresponde incorretamente

1

Se eu escrever:

<?php
echo "SCRIPT_NAME: ".@$_SERVER['SCRIPT_NAME']."<br />";
?>

SCRIPT_NAME: /index.php

A linha acima é mostrada.

Estou usando essas linhas de reescrita

RewriteCond %{SCRIPT_NAME} !^/index\.php$
RewriteRule .* http://example.com/404 [L]

Eu verifiquei:

link

link

link

O RewriteCond é correspondido, então estou sendo redirecionado para o 404

[03/Aug/2013:13:07:48 +0200] [example.com/sid#23c3710][rid#263afe8/initial] (4) [perdir /var/www/vhosts/example.com/httpdocs/] RewriteCond: input='' pattern='!^/index\.php$' => matched
[03/Aug/2013:13:07:48 +0200] [example.com/sid#23c3710][rid#263afe8/initial] (2) [perdir /var/www/vhosts/example.com/httpdocs/] rewrite '404' -> 'http://example.com/404'
[03/Aug/2013:13:07:48 +0200] [example.com/sid#23c3710][rid#263afe8/initial] (2) [perdir /var/www/vhosts/example.com/httpdocs/] implicitly forcing redirect (rc=302) with http://example.com/404
[03/Aug/2013:13:07:48 +0200] [example.com/sid#23c3710][rid#263afe8/initial] (1) [perdir /var/www/vhosts/example.com/httpdocs/] escaping http://example.com/404 for redirect
[03/Aug/2013:13:07:48 +0200] [example.com/sid#23c3710][rid#263afe8/initial] (1) [perdir /var/www/vhosts/example.com/httpdocs/] redirect to http://example.com/404 [REDIRECT/302]

Mas se eu usar example.com/index.php/nnn ou example.com/index.php

Ainda estou sendo redirecionado

[03/Aug/2013:13:10:41 +0200] [example.com/sid#23c3710][rid#263eff8/initial] (4) [perdir /var/www/vhosts/example.com/httpdocs/] RewriteCond: input='' pattern='!^/index\.php$' => matched
[03/Aug/2013:13:10:41 +0200] [example.com/sid#23c3710][rid#263eff8/initial] (2) [perdir /var/www/vhosts/example.com/httpdocs/] rewrite '404' -> 'http://example.com/404'
[03/Aug/2013:13:10:41 +0200] [example.com/sid#23c3710][rid#263eff8/initial] (2) [perdir /var/www/vhosts/example.com/httpdocs/] implicitly forcing redirect (rc=302) with http://example.com/404
[03/Aug/2013:13:10:41 +0200] [example.com/sid#23c3710][rid#263eff8/initial] (1) [perdir /var/www/vhosts/example.com/httpdocs/] escaping http://example.com/404 for redirect
[03/Aug/2013:13:10:41 +0200] [example.com/sid#23c3710][rid#263eff8/initial] (1) [perdir /var/www/vhosts/example.com/httpdocs/] redirect to http://example.com/404 [REDIRECT/302

Não consigo ver nada na entrada = '', está vazio em cada solicitação. Então nunca será diferente como o padrão, então sempre será igual a

Alguma sugestão?

    
por Jvrq 03.08.2013 / 13:26

1 resposta

1

A variável do Apache que você deseja é chamada %{SCRI­PT_­FIL­ENAME} .

No $_SERVER super global do PHP, tanto o SCRIPT_NAME quanto o SCRIPT_FILENAME existem, mas no Apache, apenas %{SCRIPT_FILENAME} existe.

Não está claro na a documentação exatamente o que cada uma das variáveis do PHP contém, mas na minha testing, SCRIPT_FILENAME é um caminho completo do sistema de arquivos e SCRIPT_NAME é o caminho da raiz do documento ou o componente do caminho da URL.

    
por 03.08.2013 / 17:16