porque é que o meu mod_rewrite redirecciona apenas para a página pedida e não é necessário css, js files?

1

Estou tentando meus primeiros passos com a configuração de mod_rewrite para tornar as URLs de um aplicativo um pouco mais agradáveis.

Eu tenho um sistema skinnable, com skins sendo definidas por meio de query parameter , portanto, qualquer um dos links a seguir acionará uma skin específica a ser carregada (e armazenada como cookie):

www.mysite.com/index.html?skin=123

Estou tentando criar links de entrada interessantes no sistema, então estou usando isso:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^/(.*)/$ /index.html?app=%1 [L]
</IfModule>

que parece funcionar corretamente, por isso estou carregando a página correta nos seguintes links:

 www.mysite.com/890/  =>  www.mysite.com/index.html?skin=890

No entanto, somente minha página inicial está carregada corretamente, todos os arquivos CSS e JS ainda estão sendo solicitados do caminho errado www.mysite.com/890/ vs. www.mysite.com

Pergunta:
Como posso reescrever todos os arquivos solicitados (css, js, img ...) para serem corretamente redirecionados, excluindo o caminho /890/ ? Além disso, existe uma maneira de tornar minha reescrita mais genérica, para que eu possa lidar com ambos

 www.mysite.com/890/         => www.mysite.com/index.html?skin=890
 www.mysite.com/890/foo.html => www.mysite.com/foo.html?skin=890
 www.mysite.com/890/bar.html => www.mysite.com/bar.html?skin=890

Obrigado por derramar alguma luz!

    
por frequent 10.05.2013 / 11:37

1 resposta

3

Porque você o definiu para reescrever apenas os URIs que terminam em uma barra. Se você quiser também usar qualquer coisa que siga a barra, você precisa de um pouco mais. Tente isto:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^/(.*)/$ /index.html?app=%1 [L]
    RewriteRule ^/(.*)/(.+)$ /$1?app=$2 [L]
</IfModule>

A segunda regra diz "se ele contiver uma barra, então armazene tudo até a próxima barra em $ 1. Em seguida, ignore a barra. Tudo o que segue a segunda barra deve ser armazenado em $ 2".

www.mysite.com/foo/ será capturado pela primeira regra de reescrita e reescrito em www.mysite.com/index.html?skin=foo

www.mysite.com/foo/whatever.html será capturado pela segunda regra de reescrita e reescrito em www.mysite.com/whatever.html?skin=foo

    
por 10.05.2013 / 11:45