Sim, eu li o manual do Apache e pesquisei aqui. Por alguma razão, simplesmente não consigo fazer isso funcionar. O mais próximo que cheguei foi fazer com que ele remova a extensão, mas ela aponta para o diretório raiz. Eu quero que isso funcione apenas no diretório que contém o .htaccess
arquivo.
Preciso fazer três coisas com o .htaccess
arquivo.
Eu preciso remover o .php
uma. Tenho várias páginas que usam guias e a URL se parece com page.php # guia - isso é possível?
b. Tenho uma página que usa um ID de sessão anexado ao URL para garantir que você veio do lugar certo
www.domain.com/download-software.php?abcdefg
.
Isso é possível? Além disso, preciso remover ".php" dos links em meu arquivo de inclusão de navegação de cabeçalho? DevemosIE "<a href="support.php">support</a>" be <a href="support">support</a>?
- Eu gostaria que fosse forçado "www" antes de cada URL, então não é
domain.com
, maswww.domain.com/page
. - Eu gostaria de remover todas as barras finais das páginas.
Vou continuar procurando, tentando, etc. Estar em um subdiretório pode causar problemas?
Respostas:
A resposta de Gumbo na questão Stack Overflow Como ocultar a extensão .html com mod_rewrite do Apache deve funcionar bem.
Re 1) Altere o .html para .php
Re a.) Sim, isso é possível, basta adicionar
#tab
ao URL.Re b.) Isso é possível usando
QSA
(Query String Append), veja abaixo.Isso também deve funcionar em um caminho de subdiretório:
fonte
[L,
espaçoQSA]
, caso contrário, ocorrerá 500 Erro Interno do Servidor ./index/bla/bla
com que seja o mesmo queindex.php
Apache mod_rewrite
O que você está procurando é o mod_rewrite ,
De um modo geral,
mod_rewrite
funciona combinando o documento solicitado com as expressões regulares especificadas e, em seguida, realiza reescritas de URL internamente (dentro do processo apache) ou externamente (no navegador do cliente). Essas reescritas podem ser tão simples quanto traduzir internamente example.com/foo em uma solicitação de example.com/foo/bar.Os documentos do Apache incluem um
mod_rewrite
guia e acho que algumas das coisas que você deseja fazer são abordadas nele. Guia detalhado do mod_rewrite .Forçar o
www
subdomínioO guia de reescrita inclui instruções para isso no exemplo de nome de host canônico .
Remova as barras finais (Parte 1)
Não tenho certeza por que você faria isso, já que o guia de reescrita inclui um exemplo do oposto , ou seja, sempre incluindo uma barra final. Os documentos sugerem que a remoção da barra final tem grande potencial para causar problemas:
Talvez você possa explicar por que deseja remover a barra final o tempo todo.
Remover
.php
extensãoA coisa mais próxima de fazer isso que posso pensar é reescrever internamente cada documento de solicitação com uma extensão .php, ou seja, example.com/somepage é processado como uma solicitação para example.com/somepage.php. Observe que proceder dessa maneira exigiria que cada alguma página realmente exista como alguma página.php no sistema de arquivos.
Com a combinação certa de expressões regulares, isso deve ser possível até certo ponto. No entanto, posso prever alguns possíveis problemas com as páginas de índice não sendo solicitadas corretamente e não correspondendo aos diretórios corretamente.
Por exemplo, isso irá reescrever corretamente example.com/test como uma solicitação para example.com/test.php:
Mas fará com que example.com não carregue porque não existe example.com/.php
Imagino que, se você remover todas as barras finais, escolher uma solicitação de índice de diretório de uma solicitação de nome de arquivo no diretório pai será quase impossível. Como você determina uma solicitação para o diretório 'foobar':
de uma solicitação de um arquivo chamado foobar (que na verdade é foobar.php)
Pode ser possível se você usar a
RewriteBase
diretiva. Mas se você fizer isso, o problema ficará muito mais complicado, pois você exigiráRewriteCond
diretivas para fazer a verificação no nível do sistema de arquivos se a solicitação mapeia para um diretório ou arquivo.Dito isso, se você remover o requisito de remover todas as barras finais e, em vez disso, forçar a adição de barras finais, o problema de "nenhuma extensão .php" se torna um pouco mais razoável.
Isso ainda não é perfeito - toda solicitação de arquivo ainda tem .php anexado à solicitação internamente. Uma solicitação de 'hi.txt' colocará isso em seus registros de erro:
Mas há outra opção, defina as diretivas
DefaultType
eDirectoryIndex
assim:Atualização de 14/11/2013 - Corrigido o snippet acima para incorporar a observação de Nicorellius
Agora as solicitações para hi.txt (e qualquer outra coisa) são bem-sucedidas, as solicitações para example.com/test retornarão a versão processada de test.php e os arquivos index.php funcionarão novamente.
Devo dar crédito a quem o crédito é devido por esta solução como eu encontrei Michael J. Radwins Blog pesquisando no Google por php no extension apache .
Remova as barras finais
Algumas pesquisas
apache remove trailing slashes
me levaram a algumas páginas de otimização de mecanismos de pesquisa. Aparentemente, alguns sistemas de gerenciamento de conteúdo (Drupal, neste caso) disponibilizarão conteúdo com e sem uma barra final em URls, o que, no mundo do SEO, fará com que seu site incorra em uma penalidade de conteúdo duplicado. FonteA solução parece bastante trivial, usando
mod_rewrite
we reescrever na condição de que o recurso solicitado termina em a/
e reescrever a URL enviando de volta o301 Permanent Redirect
cabeçalho HTTP.Aqui está seu exemplo, que assume que seu domínio é blamcast.net e permite que a solicitação seja opcionalmente prefixada com
www.
.Agora estamos chegando a algum lugar. Vamos juntar tudo e ver como fica.
Obrigatório
www.
, não.php
e sem barras finaisIsso pressupõe que o domínio é foobar.com e está sendo executado na porta 80 padrão.
O sinalizador 'R' é descrito na
RewriteRule
seção de diretiva. Snippet:Nota Final
Não consegui fazer a remoção da barra funcionar com sucesso. O redirecionamento acabou me dando loops de redirecionamento infinitos. Depois de ler a solução original mais de perto, tenho a impressão de que o exemplo acima funciona para eles por causa de como a instalação do Drupal está configurada. Ele menciona especificamente:
Em referência a URLs que terminam com e sem barra. Além disso,
fonte
DirectoryIndex index index.html
? ouDirectoryIndex index.php index.html
?Além de outras respostas acima,
Você também pode tentar isso para remover extensões .php completamente de seu arquivo e para evitar loop infinito :
Este código funcionará em Root / .htaccess. Certifique-se de alterar o RewriteBase se quiser colocá-lo em um arquivo htaccess no subdiretório.
Editar:
No apache 2.4 e posterior, você também pode usar o sinalizador END para evitar erros de loop infinito. O exemplo a seguir funciona da mesma forma que o acima no apache 2.4,
fonte
O código a seguir funciona bem para mim:
fonte
Este é um método se você quiser fazer isso para apenas um arquivo específico:
Ref: http://css-tricks.com/snippets/htaccess/remove-file-extention-from-urls/
fonte
Depois de alterar o parâmetro
AllowOverride
doNone
queAll
em/etc/apache2/apache2.conf
(Debian 8), seguindo esta , o arquivo .htaccess apenas deve conter:E foi o suficiente para esconder a extensão .php dos arquivos
fonte
MultiViews
isso é pronto para uso<a href="somepage.php">
link</a>
para<a href="somepage">
link</a>
no código-fonteTente isto
O código a seguir certamente funcionará
fonte
Não sei por que as outras respostas não funcionaram para mim, mas este código que encontrei funcionou:
Isso é tudo o que está em meu htaccess e example.com/page mostra example.com/page.php
fonte
Para remover a extensão .php de um arquivo PHP, por exemplo yoursite.com/about.php para yoursite.com/about Siga estas etapas. Abra o arquivo .htaccess (crie um novo se não existir) na raiz do seu site e adicione o código a seguir.
Para remover a extensão .html de um arquivo html por exemplo seusite.com/sobre.html para seusite.com/sobre Siga estas etapas.
Abra o arquivo .htaccess (crie um novo se não existir) na raiz do seu site e adicione o código a seguir.
Referência: Como remover extensão php da URL
fonte
Se você está codificando em PHP e deseja remover .php para ter um URL como:
http://yourdomain.com/blah -> que aponta para /blah.php
Isso é tudo que você precisa:
fonte
Achei o conceito 100% funcionando para mim:
Use este código na raiz do arquivo .htaccess do seu site como:
offline - wamp \ www \ YourWebDir
online - public_html /
fonte
RewriteRule
s com a tagL
um ao lado do outro.[L]
dizmod_rewrite
que é a última regra para o especificadoRewriteCond
.Aqui está o código que usei para ocultar a
.php
extensão do nome do arquivo:Nota:
R=301
é para redirecionamento permanente e é recomendado para uso para fins de SEO. No entanto, se alguém quiser apenas um redirecionamento temporário, substitua-o por apenasR
fonte
Acabei com o seguinte código de trabalho:
fonte
Se o seu URL em PHP como http://yourdomain.com/demo.php que vem como http://yourdomain.com/demo
Isso é tudo que você precisa:
criar arquivo .htaccess
fonte
http://example.com/myfile
mas não funcionou parahttp://example.com/myfolder/
(arquivo de índice). Você pode me ajudar a fazer funcionar para o arquivo de índice?Experimentar
fonte