A regra de reescrita do Apache não corresponde ao arquivo “.htaccess”

2

A mesma regra de reescrita do Apache funciona (match) no VHost, mas não no arquivo ".htaccess":

<VirtualHost *:80>
ServerName 192.168.1.100
ServerAlias example.com
DocumentRoot /test

RewriteEngine On
RewriteRule ^/test.html$ /test2.html
RewriteLog "/tmp/rewrite.log"
RewriteLogLevel 9

<Directory "/">
AllowOverride All
</Directory>

</VirtualHost>

Regravar registro:

192.168.1.10 - - [13/May/2013:16:19:31 +0100] [example.com/sid#7fd764555ed0][rid#7fd764ad9758/initial] (2) init rewrite engine with requested uri /test.html
192.168.1.10 - - [13/May/2013:16:19:31 +0100] [example.com/sid#7fd764555ed0][rid#7fd764ad9758/initial] (3) applying pattern '^/test.html$' to uri '/test.html'
192.168.1.10 - - [13/May/2013:16:19:31 +0100] [example.com/sid#7fd764555ed0][rid#7fd764ad9758/initial] (2) rewrite '/test.html' -> '/test2.html'
192.168.1.10 - - [13/May/2013:16:19:31 +0100] [example.com/sid#7fd764555ed0][rid#7fd764ad9758/initial] (2) local path result: /test2.html
192.168.1.10 - - [13/May/2013:16:19:31 +0100] [example.com/sid#7fd764555ed0][rid#7fd764ad9758/initial] (2) prefixed with document_root to /test/test2.html
192.168.1.10 - - [13/May/2013:16:19:31 +0100] [example.com/sid#7fd764555ed0][rid#7fd764ad9758/initial] (1) go-ahead with /test/test2.html [OK]

". arquivo htaccess"

# cat /test/.htaccess 
RewriteEngine On
RewriteRule ^/test.html$ /test2.html

Regravar registro:

192.168.1.10 - - [13/May/2013:16:22:17 +0100] [example.com/sid#7fd76455b7d0][rid#7fd764af0d78/initial] (3) [perdir /test/] strip per-dir prefix: /test/test.html -> test.html
192.168.1.10 - - [13/May/2013:16:22:17 +0100] [example.com/sid#7fd76455b7d0][rid#7fd764af0d78/initial] (3) [perdir /test/] applying pattern '^/test.html$' to uri 'test.html'
192.168.1.10 - - [13/May/2013:16:22:17 +0100] [example.com/sid#7fd76455b7d0][rid#7fd764af0d78/initial] (1) [perdir /test/] pass through /test/test.html
    
por HTF 13.05.2013 / 17:25

2 respostas

3

De acordo com o segundo log, ele está procurando "^ / test.html $" no URL "test.html". Não é possível corresponder por causa da barra no padrão. Experimente

RewriteRule ^test.html$ /test2.html

em vez de

RewriteRule ^/test.html$ /test2.html

no seu arquivo .htaccess.

    
por 13.05.2013 / 17:37
1

Adicione isto acima do RewriteRule no seu .htaccess:

RewriteCond% {HTTP_HOST} ^ (www.)? / test / test.html $

Altere o caminho para se adequar ao seu ambiente.

    
por 13.05.2013 / 17:37