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ê?
Tags mod-rewrite rewrite mod-proxy