2012-04-05 21 views
15

Chcę coś umieścić w moim pliku .htaccess, który ukryje rozszerzenie pliku .php dla moich plików php, więc przejście do strony www.example.com/dir/somepage spowoduje wyświetlenie adresu www.example.com/dir/somepage.php.Jak mogę użyć .htaccess do ukrycia rozszerzeń URL .php?

Czy istnieje na to rozwiązanie? Moja strona korzysta z HTTPS, jeśli to w ogóle ma znaczenie.

To jest mój .htaccess w tej chwili:

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

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

Odpowiedz

38

użyć tego kodu w pliku .htaccess pod 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

Jak można wykluczyć strony? To wydaje się zakłócać mój skrypt logowania, więc chciałbym wykluczyć tę stronę z tych przeróbek. – ChristopherStrydom

+0

Ogólnie można dodać warunek typu "RewriteCond% {REQUEST_URI}! ^/(Page1 | page2)". – anubhava

+0

Dzięki za spróbowanie. Myślę, że dzieje się to, gdy strona jest ponownie ładowana bez rozszerzenia, to tracą zmienne. czy istnieje sposób, aby to naprawić? To tak, jakby dwukrotnie się logowało ... myślę ... raz z e-mailem i przekazem, a potem znowu bez. więc w ogóle nie mogę się zalogować – ChristopherStrydom

0

Spróbuj tego:

# 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: 

referencyjny:

How to hide .php extension in .htaccess

+0

To nie działa dla mnie, niestety. – Markum

+0

Wypróbuj powyższy kod. –

+0

Nadal nie działa. – 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> 

dziwne, ten kod ga ve mnie Błędy HTTP 500 po wypróbowaniu w XAMPP w Windows. Usunięcie komentarzy naprawiło to. Przesunięcie komentarzy tak, aby były na własnych liniach, zamiast na tych samych liniach, co instrukcje.

+1

Próbowałem tego i daje mi błąd 500. – Markum

+1

Nieparzysty. Mi to pasuje. – TRiG

+1

@Markum. Odkąd odkryłem, że niektóre implementacje nie lubią komentarzy na tych samych liniach co kod. Spróbuj usunąć komentarze. – TRiG

4

Usuń rozszerzenie php

Można użyć kodu w /.htaccess:

RewriteEngine on 


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

Z kodu powyżej, będziesz mieć dostęp do pliku /file.php jako/file

Usuń rozszerzenie html

RewriteEngine on 


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

Uwaga: „” RewriteEngine na dyrektywy należy stosować raz na górze za htaccess, więc jeśli chcesz połączyć te 2 reguły po prostu usunąć wiersz z drugiej reguły. Możesz również usunąć dowolne inne rozszerzenia, po prostu zastąp je .php na kodzie.

Happy htaccessing!