Usando o mod_rewrite do Apache para reescrever o host para a subpasta, mas ele redireciona ao invés de reescrever

1

Eu quero simular hosts virtuais por .htaccess, então eu quero reescrever o nome do host para subpasta. Funciona, mas em algumas URLs não é reescrito, mas redirecionado.

Este é o meu arquivo .htacess:

RewriteEngine on
RewriteBase /

# Rewrite from subdomains to subfolders with builds
RewriteCond %{HTTP_HOST} ^(.*)\.(.*)\.ci\.example\.com$
RewriteCond %{REQUEST_URI} !^/builds/
RewriteCond %{REQUEST_URI} !^/robots.txt
RewriteRule ^(.*)$ /builds/%2/%1/$1 [PT]


# Example project
RewriteCond %{HTTP_HOST} ^old\.domain\.com$ [NC,OR]
RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]
# Rewrite production to master subfolder
RewriteCond %{HTTP_HOST} ^www\.example\.com$
RewriteCond %{REQUEST_URI} !^/builds/
RewriteRule ^(.*)$ builds/example-project/master/$1 [PT]

Se eu acessar, por exemplo, http://example.com/ , ele irá reescrever corretamente para /builds/sum/folder . Se http://example.com/page.html irá reescrever para /builds/sum/folder/page.html . Mas se eu acessar http://example.com/folder ele não irá reescrever, mas 301 redirecionará para /builds/sum/folder/folder (e lá ele carrega index.html ).

Por que ele sempre é reescrito, mas redireciona se o caminho de destino não for um arquivo existente, mas a pasta com index.html? (Eu quero reescrever tudo, então URL no navegador não vai mudar.)

EDIT: Para entender melhor o que acontece:

Bobik-MBP:Sites Bobik$ telnet www.example.com 80
Trying 1.2.3.4...
Connected to example.com.
Escape character is '^]'.
GET http://www.example.com/folder
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>301 Moved Permanently</title>
</head><body>
<h1>Moved Permanently</h1>
<p>The document has moved <a href="http://www.example.com/builds/sub/folder/">here</a>.</p>
</body></html>
Connection closed by foreign host.

$ telnet www.example.com 80
Trying 1.2.3.4...
Connected to example.com.
Escape character is '^]'.
GET http://www.example.com/folder/index.html
<!DOCTYPE html>
<html>
... (requested page)
    
por Bobík 21.09.2015 / 07:56

0 respostas