Pergunta

Estou desenvolvendo um site PHP que usa roteamento de URL. Eu gostaria que o site seja diretório independente, de modo que pudesse ser movido de http://site.example.com/ para http://example.com/site/ sem ter que mudar a cada caminho no HTML . O problema surge quando eu estou ligando para arquivos que não estão sujeitos ao encaminhamento, como arquivos CSS, imagens e assim por diante.

Por exemplo, vamos supor que a vista para o index do welcome controlador de ação contém o img/banner.jpg imagem. Se a página é solicitada com a url http://site.example.com/welcome , o navegador solicitar a imagem como http://site.example.com/img/banner.jpg , o que é perfeitamente bem. Mas, se a página é solicitada com a url http://site.example.com/welcome/index, o navegador vai pensar que welcome é um diretório e vai tentar buscar a imagem como http: //site.example.com/welcome/img/banner.jpg , que é obviamente errado.

Eu já consideradas algumas opções, mas todos eles parecem imperfeitos para mim:

  • Use url reescrever para redirecionar solicitações a partir de ( * css |. * js |. ...) ou ( css / * | js / * | ...) para o caminho certo.

    Problema : Cada extensão teriam de ser nomeado nas regras de reescrita. Se alguém gostaria de acrescentar um novo tipo de ficheiro (por exemplo, um arquivo mp3), que não iria ser reescrito.

  • Prepend o caminho base a cada um caminho relativo com uma função php. Por exemplo:
    <img src="<?php echo url::base(); ?>img/banner.jpg" />

    Problema : Parece confuso; css -. E js -limas contendo caminhos teria de ser processada por PHP

Então, como você manter um diretório independente site? Existe uma maneira melhor / mais limpo do que os que eu vim com?

Foi útil?

Solução

Você poderia colocar na cabeça

<base href="<?php echo url::base(); ?>" /> 

Isto significará o navegador irá solicitar quaisquer URLs não-absolutos em relação a esse caminho. No entanto, eu não sei como isso afetaria URLs embutidos em arquivos CSS etc. Isso não afeta caminhos definidos em arquivos CSS. (Graças mooware)

Outras dicas

A coisa <base> vai funcionar, mas é preciso lembrar que vai afetar suas tags <a> também. Veja este exemplo:.

<!-- this page is http://oursite.com/index.html -->
<html>
 <head>
    <base href="http://static.oursite.com/" />
 </head>
 <body>
    <img src="logo.gif" alt="this is http://static.oursite.com/logo.gif" />
    <a href="/login">this links to http://static.oursite.com/login which is not what we wanted.  we wanted http://oursite.com/login</a>
 </body>
</html>

Se você usar uma chamada de função PHP para criar seus links, que não será um problema, como você pode apenas se certificar de que cospe URL absoluto. Mas se você (ou seus designers) mão-código as tags <a> então você está preso com o mesmo problema de novo, agora com <a> vez de <img>.

EDIT: devo acrescentar o parágrafo acima é supondo que você servir imagens a partir de um nome de host diferente como nós fazemos. Se não o fizer, então, obviamente, que não será um problema.

tomhaigh tem um ponto bom, e valeria a pena investigá-lo ainda mais.

De acordo com a MSDN , o < a href = "http://msdn.microsoft.com/en-au/library/ms535191(VS.85).aspx" rel = "nofollow noreferrer"> bases obras tag para todas as fontes, incluindo estilo folhas, imagens, etc.

Talvez eu estou faltando alguma coisa, mas você não pode simplesmente fazer o que eu (e eu pensei que todo mundo) fazer / es

? Ou seja, colocar todas as suas imagens, css, javascripts, etc em um ou seja diretório comum:.

/inc/images/
/inc/css/
/inc/javascript/
etc

E, em seguida, referenciá-los com URLs base-relativa, i:.

<img src="/inc/images/foo.jpg" />
etc

?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top