Wie entferne ich .html
von der URL einer statischen Seite?
Außerdem muss ich jede URL mit .html
zu der ohne umleiten . (dh www.example.com/page.html
zu www.example.com/page
).
Wie entferne ich .html
von der URL einer statischen Seite?
Außerdem muss ich jede URL mit .html
zu der ohne umleiten . (dh www.example.com/page.html
zu www.example.com/page
).
Antworten:
Ich denke, eine Erklärung von Jons Antwort wäre konstruktiv. Folgende:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
Überprüft, ob die Umschreiberegel fortgesetzt wird, wenn die angegebene Datei bzw. das angegebene Verzeichnis nicht vorhanden ist:
RewriteRule ^(.*)\.html$ /$1 [L,R=301]
Aber was heißt das? Es verwendet Regex (reguläre Ausdrücke) . Hier ist etwas, das ich früher gemacht habe ...
Ich denke das ist richtig.
HINWEIS: Verwenden Sie beim Testen .htaccess
keine 301-Weiterleitungen. Verwenden Sie 302, bis der Test abgeschlossen ist, da der Browser 301s zwischenspeichert. Siehe https://stackoverflow.com/a/9204355/3217306
Update: Ich habe mich leicht geirrt, .
stimmt mit allen Zeichen außer Zeilenumbrüchen überein, enthält also Leerzeichen. Auch hier ist eine hilfreiche regex Spickzettel
Quellen:
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
Um die Erweiterung .html aus Ihren URLs zu entfernen, können Sie den folgenden Code in root / htaccess verwenden:
RewriteEngine on
RewriteCond %{THE_REQUEST} /([^.]+)\.html [NC]
RewriteRule ^ /%1 [NC,L,R]
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^ %{REQUEST_URI}.html [NC,L]
HINWEIS: Wenn Sie eine andere Erweiterung entfernen möchten, z. B. um die .php-Erweiterung zu entfernen, ersetzen Sie einfach den HTML- Code überall durch PHP im obigen Code.
Mit .htaccess unter Apache können Sie die Umleitung folgendermaßen durchführen:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\.html$ /$1 [L,R=301]
Wenn Sie .html aus der URL entfernen möchten, verlinken Sie einfach auf die Seite ohne .html
<a href="http://www.example.com/page">page</a>
!-f
Dies sollte für Sie funktionieren:
#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]
Sie müssen sicherstellen, dass Sie auch haben Options -MultiViews
.
Keiner der oben genannten Punkte funktionierte für mich auf einem Standard-cPanel-Host.
Das hat funktioniert:
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.html [NC,L]
Vielen Dank für Ihre Antworten. Ich habe mein Problem bereits gelöst. Angenommen, ich habe meine Seiten unter http://www.yoursite.com/html . Es gelten die folgenden .htaccess- Regeln.
<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>
Ich verwende diese .htacess, um die .html-Erweiterung von meiner URL-Site zu entfernen. Bitte überprüfen Sie, ob dies der richtige Code ist:
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 /
bisschen. Leider verstehe ich nicht, warum es funktioniert hat, aber ich denke, ich werde es bald lernen.
Für diejenigen, die Firebase-Hosting verwenden, funktioniert keine der Antworten auf dieser Seite. Weil Sie nicht .htaccess
in Firebase-Hosting verwenden können. Sie müssen die Datei firebase.json konfigurieren. Fügen Sie einfach die Zeile "cleanUrls": true
in Ihre Datei ein und speichern Sie sie. Das ist es.
Nach dem Hinzufügen der Zeile wird firebase.json folgendermaßen aussehen:
{
"hosting": {
"public": "public",
"cleanUrls": true,
"ignore": [
"firebase.json",
"**/.*",
"**/node_modules/**"
]
}
}
Um die Erweiterung .html aus Ihren URLs zu entfernen, können Sie den folgenden Code in root / htaccess verwenden:
#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]
Vielen Dank
RewriteRule /(.+)(\.html)$ /$1 [R=301,L]
Versuchen Sie dies :) Ich weiß nicht, ob es funktioniert.