Czy przez „usuń plik .html” masz na myśli „nie wymagaj obecności pliku .html”?
Wyścigi lekkości na orbicie
@Tomalak: Tak, a także przekierowujemy adresy URL z „.html” na te bez. Mój problem polega na tym, że prowadzi to do nieskończonych przekierowań. W mojej obecnej konfiguracji www.example.com/page.html i www.example.com/page są dostępne, co nie jest przyjazne dla SEO.
UWAGA: Podczas testowania .htaccessnie używaj przekierowań 301. Używaj 302 do zakończenia testów, ponieważ przeglądarka będzie buforować 301. Zobacz https://stackoverflow.com/a/9204355/3217306
Aktualizacja: trochę się pomyliłem, .pasuje do wszystkich znaków z wyjątkiem nowych linii, więc zawiera spacje. Również tutaj jest ściągawki pomocny regex
Znakomity diagram, który pomoże wyjaśnić odpowiedź.
Ric
Wskazówka dotycząca 301 i pamięci podręcznej przeglądarki rozwiązała moje problemy.
bgfvdu3w
@KnocksX Nie jestem już webmasterem i nie jestem w stanie pomóc
binaryfunt
84
Aby usunąć rozszerzenie .html ze swoich adresów URL, możesz użyć następującego kodu w katalogu root / htaccess:
RewriteEngine on
RewriteCond%{THE_REQUEST}/([^.]+)\.html [NC]RewriteRule^/%1[NC,L,R]RewriteCond%{REQUEST_FILENAME}.html -f
RewriteRule^%{REQUEST_URI}.html [NC,L]
UWAGA: Jeśli chcesz usunąć jakiekolwiek inne rozszerzenie, na przykład, aby usunąć rozszerzenie .php, po prostu zamień html wszędzie na php w powyższym kodzie.
To nic dla mnie nie robi. Czy jest jakiś powód, dla którego to nie zadziała?
Michael Yaworski
Czy masz rzeczywisty plik dla żądanego linku? To spowodowałoby!-f
Martijn
72
To powinno działać dla Ciebie:
#example.com/page will display the contents of example.com/page.htmlRewriteCond%{REQUEST_FILENAME}!-f
RewriteCond%{REQUEST_FILENAME}!-d
RewriteCond%{REQUEST_FILENAME}.html -f
RewriteRule^(.+)$ $1.html [L,QSA]#301 from example.com/page.html to example.com/pageRewriteCond%{THE_REQUEST}^[A-Z]{3,9}\ /.*\.html\ HTTP/RewriteRule^(.*)\.html$ /$1 [R=301,L]
Otrzymałem 404 w GoDaddy z tym kodem i naprawiłem go, umieszczając: Opcje + FollowSymLinks -MultiViews -Indexes na samej górze.
Labanino
1
Myślę, że to najlepsza i najpełniejsza odpowiedź, dzięki!
ctekk
Próbowałem to zrobić na hoście lokalnym, ale to nie działa, czy muszę zrobić coś jeszcze, czy muszę połączyć plik .htaccess lub jak strona go rozpoznaje?
Pianistprogrammer
Jak dodać rozszerzenie .php do # 301 z example.com/page.html do example.com/page, czy to możliwe?
20
Będziesz musiał się upewnić, że też masz Options -MultiViews.
Żadne z powyższych nie działało dla mnie na standardowym hoście cPanel.
Ze wszystkich powyższych odpowiedzi ta w końcu zadziałała. Myślę, że moja witryna jest hostowana na GoDaddy z cPanel. Kluczem są opcje -MultiViews
Brad Vanderbush
Tak, nic w tej sekcji nie działa, oczekując takiej odpowiedzi! Uratowałeś dzień!
Neil Bannet
Dzięki stary. Nie jestem pewien, dlaczego inne nie wyszły zgodnie z oczekiwaniami.
Nanoo
13
Dziękuję za twoje odpowiedzi. Już rozwiązałem swój problem. Załóżmy, że mam swoje strony pod adresem http://www.yoursite.com/html , obowiązują następujące zasady .htaccess .
Wydawało mi się, że to zadziałało, w przeciwieństwie do innych przedstawionych tutaj rozwiązań, dziękuję. Chciałbym jednak dodać, że nadal musisz zaktualizować łącza w swoim HTML (więc jeśli pierwotnie tworzysz linki do pliku .html jako <a href="page1.html"> </a>, powinieneś zaktualizować jako <a href=" example.com/page1"> </ a > i wtedy będzie działać.)
Lorenzo
Podstawową zmianą dla mnie był RewriteBase /kawałek. Niestety nie rozumiem, dlaczego to zadziałało, ale myślę, że wkrótce się nauczę.
Keno Clayton,
4
Dla tych, którzy korzystają z hostingu Firebase, żadna z odpowiedzi nie będzie działać na tej stronie. Ponieważ nie możesz korzystać .htaccessz hostingu Firebase. Będziesz musiał skonfigurować plik firebase.json. Po prostu dodaj linię "cleanUrls": truedo swojego pliku i zapisz ją. Otóż to.
Po dodaniu linii firebase.json będzie wyglądać następująco:
Aby usunąć rozszerzenie .html ze swoich adresów URL, możesz użyć następującego kodu w katalogu root / htaccess:
#mode_rerwrite start hereRewriteEngineOn# does not apply to existing directores, meaning that if the folder exists on server then don't change anything and don't run the rule.RewriteCond%{REQUEST_FILENAME}!-d
#Check for file in directory with .html extension RewriteCond%{REQUEST_FILENAME}\.html !-f
#Here we actually show the page that has .html extensionRewriteRule^(.*)$ $1.html [NC,L]
Odpowiedzi:
Myślę, że jakieś wyjaśnienie odpowiedzi Jona byłoby konstruktywne. Następujące:
sprawdza, czy jeśli określony plik lub katalog nie istnieje, wówczas reguła przepisywania jest kontynuowana:
Ale co to znaczy? Używa regex (wyrażeń regularnych) . Oto coś, co zrobiłem wcześniej ...
Myślę , że to prawda.
UWAGA: Podczas testowania
.htaccess
nie używaj przekierowań 301. Używaj 302 do zakończenia testów, ponieważ przeglądarka będzie buforować 301. Zobacz https://stackoverflow.com/a/9204355/3217306Aktualizacja: trochę się pomyliłem,
.
pasuje do wszystkich znaków z wyjątkiem nowych linii, więc zawiera spacje. Również tutaj jest ściągawki pomocny regexŹródła:
http://community.sitepoint.com/t/what-does-this-mean-rewritecond-request-filename-fd/2034/2
https://mediatemple.net/community/products/dv/204643270/using-htaccess-rewrite-rules
źródło
Aby usunąć rozszerzenie .html ze swoich adresów URL, możesz użyć następującego kodu w katalogu root / htaccess:
UWAGA: Jeśli chcesz usunąć jakiekolwiek inne rozszerzenie, na przykład, aby usunąć rozszerzenie .php, po prostu zamień html wszędzie na php w powyższym kodzie.
źródło
Z .htaccess w apache możesz zrobić takie przekierowanie:
Jeśli chodzi o usunięcie .html z adresu URL, po prostu umieść link do strony bez .html
źródło
!-f
To powinno działać dla Ciebie:
źródło
Będziesz musiał się upewnić, że też masz
Options -MultiViews
.Żadne z powyższych nie działało dla mnie na standardowym hoście cPanel.
To zadziałało:
źródło
Dziękuję za twoje odpowiedzi. Już rozwiązałem swój problem. Załóżmy, że mam swoje strony pod adresem http://www.yoursite.com/html , obowiązują następujące zasady .htaccess .
źródło
Używam tego pliku .htacess do usuwania rozszerzenia .html z mojej witryny url, sprawdź, czy jest to poprawny kod:
źródło
RewriteBase /
kawałek. Niestety nie rozumiem, dlaczego to zadziałało, ale myślę, że wkrótce się nauczę.Dla tych, którzy korzystają z hostingu Firebase, żadna z odpowiedzi nie będzie działać na tej stronie. Ponieważ nie możesz korzystać
.htaccess
z hostingu Firebase. Będziesz musiał skonfigurować plik firebase.json. Po prostu dodaj linię"cleanUrls": true
do swojego pliku i zapisz ją. Otóż to.Po dodaniu linii firebase.json będzie wyglądać następująco:
źródło
Aby usunąć rozszerzenie .html ze swoich adresów URL, możesz użyć następującego kodu w katalogu root / htaccess:
Dzięki
źródło
Spróbuj tego :) nie wiem, czy to działa.
źródło