2012-04-05 23 views
15

Voglio qualcosa da inserire nel mio file .htaccess che nasconderà l'estensione del file .php per i miei file php, quindi andare a www.esempio.it/dir/somepage mostrerebbe loro www.example.com/dir/somepage.php.Come posso usare .htaccess per nascondere le estensioni URL .php?

C'è qualche soluzione di lavoro per questo? Il mio sito utilizza HTTPS, se questo è importante.

Questo è il mio .htaccess in questo momento:

RewriteEngine On 

RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L] 

ErrorDocument 404 /error/404.php 

RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteCond %{REQUEST_URI} !/$ 
RewriteRule (.*) $1\.php [L] 
+0

Duplicato: http://stackoverflow.com/a/1760412/209139 – TRiG

risposta

38

Utilizzare questo codice nel tuo .htaccess sotto DOCUMENT_ROOT:

Options +FollowSymLinks -MultiViews 
# Turn mod_rewrite on 
RewriteEngine On 
RewriteBase/

# To externally redirect /dir/foo.php to /dir/foo 
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC] 
RewriteRule^%1 [R,L,NC] 

## To internally redirect /dir/foo to /dir/foo.php 
RewriteCond %{REQUEST_FILENAME}.php -f [NC] 
RewriteRule^%{REQUEST_URI}.php [L] 
+1

come si possono escludere le pagine? Ciò sembra interferire con il mio script di accesso, quindi vorrei escludere quella pagina da queste riscritture – ChristopherStrydom

+0

In generale è possibile aggiungere la condizione di tipo 'RewriteCond% {REQUEST_URI}! ^/(Pagina1 | pagina2)'. – anubhava

+0

Grazie ci proveremo. Quello che penso stia accadendo è quando la pagina viene ricaricata senza l'estensione sta perdendo le variabili. C'è un modo per risolvere questo problema? È come se il suo accesso due volte .... penso ... una volta con l'e-mail e passare e poi di nuovo senza. quindi in tutto non posso accedere – ChristopherStrydom

0

Prova questo:

# Unless directory, remove trailing slash 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^/]+)/$ http://example.com/folder/$1 [R=301,L] 

# Redirect external .php requests to extensionless url 
RewriteCond %{THE_REQUEST} ^(.+)\.php([#?][^\ ]*)?\ HTTP/ 
RewriteRule ^(.+)\.php$ http://example.com/folder/$1 [R=301,L] 

# Resolve .php file for extensionless php urls 
RewriteRule ^([^/.]+)$ $1.php [L]Try: 

Riferimento:

How to hide .php extension in .htaccess

+0

Questo non funziona per me, sfortunatamente. – Markum

+0

Provare quindi il codice sopra. –

+0

Ancora non funziona. – Markum

2
<IfModule mod_rewrite.c> 
RewriteEngine on 

RewriteCond %{REQUEST_FILENAME} !-f  # if the requested URL is not a file that exists 
RewriteCond %{REQUEST_FILENAME} !-d  # and it isn't a directory that exists either 
RewriteCond %{REQUEST_FILENAME}\.php -f # but when you put ".php" on the end it is a file that exists 
RewriteRule ^(.+)$ $1\.php [QSA]   # then serve that file (maintaining the query string) 

</IfModule> 

Stranamente, questo codice ga Ho riscontrato errori HTTP 500 quando ho provato XAMPP in Windows. Rimuovere i commenti lo ha risolto. Così ha spostato i commenti in modo che fossero sulle loro linee, invece che sulla stessa linea delle istruzioni.

+1

Ho provato questo e mi dà un errore 500. – Markum

+1

Dispari. Per me funziona. – TRiG

+1

@ Markum. Da allora ho scoperto che alcune implementazioni non amano i commenti sulle stesse linee del codice. Prova a rimuovere i commenti. – TRiG

4

Rimuovi estensione php

È possibile utilizzare il codice in /.htaccess:

RewriteEngine on 


RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule^%{REQUEST_FILENAME}.php [NC,L] 

Con il codice sopra, sarete in grado di accedere a /file.php come/file

Rimuovere estensione html

RewriteEngine on 


RewriteCond %{REQUEST_FILENAME}.html -f 
RewriteRule^%{REQUEST_FILENAME}.html [NC,L] 

Nota: 'RewriteEngine su' direttiva deve essere usato una volta in cima al .htaccess, quindi se si desidera combinare queste 2 regole è sufficiente rimuovere la linea dalla seconda regola. Puoi anche rimuovere qualsiasi altra estensione di tua scelta, basta sostituire il file .php con loro sul codice.

Happy htaccessing!

Problemi correlati