mod_rewrite: reescrita interna para (falso) URL limpo não é possível.

2

Esta é mais uma pergunta porquê .

Estou usando um CMS que manipula URLs limpas via mod_rewrite fora da caixa.

O site tem uma seção /accessories que agora precisa ser renomeada para /store .

Sendo no modo preguiçoso, eu só queria fazer uma reescrita interna usando mod_rewrite, então, ao acessar example.com/store/ , eu quero conteúdo servido de example.com/accessories , de forma transparente, sem qualquer redirecionamento externo.

Até agora, eu tentei isso:

RewriteEngine On

# Internally rewrite /store to /accessories
RewriteRule ^store /accessories [L] #also tried with other flags like PT, N, C

# All below rules are provided by CMS
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.+) - [PT,L]

RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^(.*) index.php

Mas nada funcionou .

As duas maneiras de fazer isso funcionar foram:

  • reescrevendo internamente a solicitação para sua URL "confusa" correspondente, desta forma:

    RewriteRule ^store /index.php?s=accessories [L]

  • usando mod_proxy e ProxyPass directive (que descartei como solução, pois mod_proxy não está disponível no servidor de produção).

Acabei de chegar à conclusão de que as URLs não podem ser reescritas internamente para outras URLs limpas (falsas), enquanto mantém o encadeamento de reescrita ativo. Por "falso" quero dizer caminhos de URL que não são caminhos de sistema de arquivos reais (normalmente, pastas) ou arquivos reais (como index.php).

Então, a pergunta é: por quê?

    
por Julián Landerreche 22.02.2012 / 18:29

0 respostas