páginas de alias do apache que carregam recursos relativos

1

Estou tentando aliasar um caminho para um arquivo específico

Eu tentei:

Alias /Console "/console/console.html"

Agora, ir para http://example.com/Console de fato traz console.html .

mas qualquer recurso relativo referenciado de dentro de console.html (ou seja, images.jpg ) falhará, pois parece ir para o document_root

O que estou fazendo de errado?

    
por kofifus 28.02.2017 / 02:46

1 resposta

1

Este é um problema do lado do cliente relacionado ao uso de URLs relativos. Como você está efetivamente reescrevendo o URL de /console/console.html a /Console , qualquer URL relativa (para imagens, CSS, JS, etc.) agora será relativa à raiz do documento e não ao subdiretório /console .

Você precisa "consertar" suas URLs relativas e torná-las relacionadas à raiz (ou seja, começar com uma barra, como em /console/images/1.jpg ) ou torná-las absolutas.

Como alternativa, você pode incluir um elemento base na seção head do seu documento HTML. Isso faz referência à URL absoluta para a qual todas as URLs relativas são relativas . Em outras palavras, como você espera que esses URLs relativos sejam relativos ao documento /console/console.html , adicione o seguinte à seção head :

<base href="http://example.com/console/console.html">

Agora, um URL relativo como images/1.jpg referenciado em um documento na URL /Console solicitará http://example.com/console/images/1.jpg , não http://example.com/images/1.jpg .

No entanto, existem advertências com o uso do elemento base . Notavelmente, se você tiver links relativos in-page usando identificadores de fragmentos, por exemplo, href="#some-id" . Agora, isso também é relativo ao seu elemento base , para que o link in-page seja quebrado. A única maneira de contornar isso é qualificar totalmente o link.

Referência: link

No entanto, Alias não é a diretiva correta a ser usada no mapeamento para um único arquivo, pois Alias é a correspondência de prefixo, portanto, /Console/foo seria mapeado para /console/console.html/foo também. Talvez você possa usar AliasMatch :

AliasMatch ^/Console$ /console/console.html

Isso mapeará apenas /Console .

Ou você poderia usar o mod_rewrite e emitir uma reescrita interna . (Ao contrário de um redirecionamento externo que mudaria o URL e faria o cliente emitir um segundo pedido.) Por exemplo:

RewriteEngine On
RewriteRule ^/?Console$ /console/console.html [L]
    
por 28.02.2017 / 10:12