Removendo .php de example.com/.php

1

Para remover apenas o .php dos meus URLs, tenho atualmente o seguinte

# Remove trailing slashes
RewriteRule ^(.*)\/$ $1 [NC,L,R=301] 

# Remove trailing .php extensions
RewriteCond %{THE_REQUEST} (\S*?)/(.*?)\.php [NC]
RewriteRule ^ %1/%2 [L,R=301]

# Add .php extension for final internal redirect
RewriteCond %{REQUEST_URI} ^(.*)$
RewriteRule !\.php$ %1.php [NC,L]

Mas essas regras não funcionam para example.com nuas, pois elas são example.com/.php . Então, como posso consertar isso?

    
por Patrick Mevzek 11.03.2018 / 05:16

1 resposta

1

Você precisa:

  • Verifique se o arquivo de destino (com a extensão .php ) existe antes reescrevê-lo internamente
  • Evite reescrever diretórios (para os quais a raiz do documento é uma).
  • Evite regravar apenas a raiz do documento (como no seu exemplo).

Por exemplo, para evitar a regravação apenas da raiz do documento, como no seu exemplo específico, você pode modificar a diretiva RewriteCond existente:

# Add .php extension for final internal redirect
RewriteCond %{REQUEST_URI} ^(.*)$

para ler:

RewriteCond %{REQUEST_URI} ^(/.+)$

/.+ corresponde a uma barra seguida por algo , o que excluiria a raiz do documento, já que a raiz do documento é naturalmente uma barra por si só.

Para evitar a regravação de todos os diretórios (dos quais a raiz do documento é um), você pode adicionar uma condição adicional para evitar a regravação de URLs que mapeiam para um diretório físico. Por exemplo:

RewriteCond %{REQUEST_URI} ^(/.+)$
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule !\.php$ %1.php [NC,L]

No entanto, se você tiver diretórios acessíveis, modifique a regra existente que remove as barras à direita. Caso contrário, você provavelmente obterá um loop de redirecionamento ao solicitar um diretório (já que mod_dir adicionará uma barra por padrão). Por exemplo:

# Remove trailing slashes
RewriteRule ^(.*)\/$ $1 [NC,L,R=301]

Deve ser modificado para incluir a mesma condição acima:

# Remove trailing slashes, unless the request maps to a directory
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ $1 [L,R=301]

Além disso, não é necessário o sinal NC aqui. E não há necessidade de escapar da barra no padrão RewriteRule .

Suponho que você também deve ter uma diretiva RewriteBase definida em outro lugar em seu arquivo, caso contrário, isso provavelmente resultará em um redirecionamento inválido em .htaccess .

    
por 11.03.2018 / 10:58