Pergunta

Estou desenvolvendo uma estrutura MVC no PHP do zero; Principalmente para a experiência de aprendizado, mas isso pode facilmente acabar em um projeto ao vivo. Eu passei por isso tutorial Como base e eu expandi a partir daí.

Solicitações são feitas assim:

Exemplesite.com/controller/action/param1/param2/ e assim por diante ...

E este é o meu arquivo .htaccess:

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ index.php?rt=$1 [L,QSA]

Portanto, todas as solicitações vão para index.php e são roteadas para o controlador e a ação corretos a partir daí. Se nenhum controlador ou ação for dada, o 'índice' padrão será assumido para ambos.

Eu tenho um controlador de índice com uma ação de índice, que deveria ser a página inicial do meu site. Eu posso acessá -lo indo para exemplos.com (já que a parte do índice é assumida). Possui algumas imagens, um link para uma folha de estilo e alguns scripts. Eles estão ligados a caminhos em relação ao index.php. Eu pensei que isso seria bom, pois toda a solicitação vá para index.php e todo o conteúdo está simplesmente incluído nesta página usando o PHP. Isso funciona se eu for para exemplos.com. Verei todas as imagens e estilos, e os scripts serão executados. No entanto, se eu for ao Exemplesite.com/index, estou roteado para a parte correta do site, mas todos os links não funcionam. O navegador acha que estou em uma pasta diferente?

Eu gostaria de poder usar caminhos relativos para todo o conteúdo do meu site, porque, caso contrário, preciso usar caminhos absolutos em todos os lugares para garantir que as coisas apareçam. Isso é possível?

Foi útil?

Solução

Você precisa de um caminho absoluto, porque os navegadores avaliam os caminhos relativos em relação ao URI de solicitação atual (a menos que você use a tag base, veja abaixo). Lembre -se, porém, que um caminho absoluto não necessidade significa que você precisa incluir o nome do domínio nele. Simplesmente começar com uma barra para a frente é suficiente. É o caminho absoluto em relação ao servidor, por assim dizer.

Então:

<img src="/images/bla.gif">

ao invés de

<img src="images/bla.gif">

... vai funcionar bem.

Como mencionei, outra abordagem seria usar o Tag base. Mas, por razões que não me lembro agora, acredito que é recomendável não usá -lo. (Se alguém mais quiser fazer uma coisa aqui ...)

Outras dicas

Imagens imo, javascript, estilos e outros conteúdos estáticos devem não fazer parte do sistema de roteamento. Isso significa que você carrega o PHP para cada solicitação (um desempenho de desempenho), quando o Apache pode servir esses arquivos muito bem.

Meu .htaccess sempre permite que os arquivos existentes ignorem o PHP:

# Files with an extension that exist are served up straight.
RewriteCond %{REQUEST_URI} \..+$
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule .* - [L]
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top