Não conseguir encontrar seus arquivos JavaScript e CSS é um problema do lado do cliente / navegador relacionado ao seu caminho de URL, não é algo que deve ser corrigido .htaccess
(pelo menos não neste caso) - embora seja porque você está alterando isso Caminho da URL (in .htaccess
) em que você está enfrentando esse problema.
Como o @closetnoc sugeriu nos comentários, esse problema é causado pelo uso de URLs relativos no seu HTML. Em relação a quê? Lembre-se, é o agente / navegador do usuário que resolve os URLs relativos no seu HTML, não no servidor. Então, você precisa corrigir seus URLs; não .htaccess
.
Por exemplo, se você estiver referenciando seu arquivo CSS com uma URL relativa do formulário href="styles.css"
(observe, sem prefixo de barra) e você estiver atualmente na URL example.com/view.php?id=15
, o navegador resolverá naturalmente sua URL e solicitação CSS example.com/styles.css
(na raiz do documento). No entanto, se você está atualmente na URL example.com/watch/15
(efetivamente em um /watch
"subdiretório" [* 1] ), então o navegador irá resolver o seu parente CSS URL relativa a um /watch
subdiretório, ao invés da raiz do documento, assim você acaba com um absoluto / resolvido URL do formulário example.com/watch/styles.css
.
( [* 1] Observe que "subdiretório" nesse contexto não é necessariamente um subdiretório físico no servidor - é um "subdiretório" no caminho da URL; um segmento de caminho adicional. Mas o navegador não sabe a diferença. )
O mesmo se aplica se você estiver usando URLs relativos em seus documentos de erro personalizados (definidos com a ErrorDocument
diretiva no Apache). O documento de erro personalizado pode potencialmente ser chamado em qualquer URL, portanto, qualquer URL relativo a um recurso estático (CSS, imagem, JS etc.) será relativo à URL que causou o erro, não ao próprio documento de erro (cuja localização está efetivamente oculta do agente do usuário).
Se você alterasse seus URLs JavaScript e CSS para serem relativos à raiz (começando com uma barra) ou mesmo absolutos, não haveria esse problema. Este seria o método preferido. Como alternativa, você pode usar o base
elemento ...
base
tag / elemento
Como alternativa, você pode incluir um base
elemento na head
seção do seu documento HTML (embora isso não ocorra sem suas ressalvas [* 2] ). Isso faz referência ao URL absoluto ao qual todos os URLs relativos são relativos . Em outras palavras, como você espera que esses URLs relativos sejam relativos à raiz do documento, adicione o seguinte à head
seção:
<base href="http://example.com/">
Agora, um URL relativo, como styles.css
mencionado em um documento no URL /watch/15
, solicitará http://example.com/styles.css
, não http://example.com/watch/styles.css
.
[* 2] No entanto, existem algumas ressalvas no uso dobase
elemento. Uma preocupação principal é que qualquerURL relativo destinado aodocumento atual agora terá como alvo o URL base. Isso pode afetar âncoras in-page comohref="#top"
e URLs do formuláriohref="?sortby=date"
etc. E tambémform
elementos que se submetem usando umaction
atributovazio(por exemplo,<form action="" ...
). Esses URLs relativos que segmentam o documento atual precisarão ser modificados para incluir o URL completo da página atual (o que pode prejudicar o ponto de usar abase
tag como uma solução alternativa para começar).
Referência: