Jak usunąć .html
z adresu URL strony statycznej?
Muszę też przekierować dowolny adres URL z .html
do adresu bez niego. (czyli www.example.com/page.html
do www.example.com/page
).
Jak usunąć .html
z adresu URL strony statycznej?
Muszę też przekierować dowolny adres URL z .html
do adresu bez niego. (czyli www.example.com/page.html
do www.example.com/page
).
Odpowiedzi:
Myślę, że jakieś wyjaśnienie odpowiedzi Jona byłoby konstruktywne. Następujące:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
sprawdza, czy jeśli określony plik lub katalog nie istnieje, wówczas reguła przepisywania jest kontynuowana:
RewriteRule ^(.*)\.html$ /$1 [L,R=301]
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/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
Ź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
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.
Z .htaccess w apache możesz zrobić takie przekierowanie:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\.html$ /$1 [L,R=301]
Jeśli chodzi o usunięcie .html z adresu URL, po prostu umieść link do strony bez .html
<a href="http://www.example.com/page">page</a>
!-f
To powinno działać dla Ciebie:
#example.com/page will display the contents of example.com/page.html
RewriteCond %{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/page
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*\.html\ HTTP/
RewriteRule ^(.*)\.html$ /$1 [R=301,L]
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:
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.html [NC,L]
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 .
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /html/(.*).html\ HTTP/
RewriteRule .* http://localhost/html/%1 [R=301,L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /html/(.*)\ HTTP/
RewriteRule .* %1.html [L]
</IfModule>
Używam tego pliku .htacess do usuwania rozszerzenia .html z mojej witryny url, sprawdź, czy jest to poprawny kod:
RewriteEngine on
RewriteBase /
RewriteCond %{http://www.proofers.co.uk/new} !(\.[^./]+)$
RewriteCond %{REQUEST_fileNAME} !-d
RewriteCond %{REQUEST_fileNAME} !-f
RewriteRule (.*) /$1.html [L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^.]+)\.html\ HTTP
RewriteRule ^([^.]+)\.html$ http://www.proofers.co.uk/new/$1 [R=301,L]
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:
{
"hosting": {
"public": "public",
"cleanUrls": true,
"ignore": [
"firebase.json",
"**/.*",
"**/node_modules/**"
]
}
}
Aby usunąć rozszerzenie .html ze swoich adresów URL, możesz użyć następującego kodu w katalogu root / htaccess:
#mode_rerwrite start here
RewriteEngine On
# 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 extension
RewriteRule ^(.*)$ $1.html [NC,L]
Dzięki
RewriteRule /(.+)(\.html)$ /$1 [R=301,L]
Spróbuj tego :) nie wiem, czy to działa.