Hoe verwijder ik .html van de URL?

Hoe verwijder ik .htmluit de URL van een statische pagina?

Ook moet ik elke url met .htmlomleiden naar de URL zonder. (d.w.z. www.example.com/page.htmlnaar www.example.com/page).


Antwoord 1, autoriteit 100%

Ik denk dat een uitleg van Jon’s antwoordconstructief zou zijn. Het volgende:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

controleert dat als het opgegeven bestand of de opgegeven map niet bestaat, de herschrijfregel verder gaat:

RewriteRule ^(.*)\.html$ /$1 [L,R=301]

Maar wat betekent dat? Het gebruikt regex (reguliere uitdrukkingen). Hier is iets wat ik eerder heb gemaakt…

Ik denkdat dat juist is.

OPMERKING: Gebruik bij het testen van uw .htaccessgeen301-omleidingen. Gebruik 302 totdat u klaar bent met testen, omdat de browser 301’s in de cache zal opslaan. Zie https://stackoverflow.com/a/9204355/3217306

Update:ik heb me een beetje vergist, .komt overeen met alle tekens behalve nieuwe regels, dus inclusief witruimte. Ook hier is een handig regex-spiekbriefje

Bronnen:

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


Antwoord 2, autoriteit 86%

Om de .html-extensie van uw url’s te verwijderen, kunt u de volgende code gebruiken in 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]

OPMERKING: als je een andere extensie wilt verwijderen, bijvoorbeeld om de .php-extensie te verwijderen, vervang dan overal de htmldoor phpin de bovenstaande code.

Zie ook deze Hoe verwijder je .htmlen .phpvan URL’s met htaccess`.


Antwoord 3, autoriteit 58%

Dit zou voor u moeten werken:

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

Antwoord 4, autoriteit 58%

Met .htaccess onder apache kun je de omleiding als volgt doen:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\.html$ /$1 [L,R=301] 

Voor het verwijderen van .html van de url, link gewoon naar de pagina zonder .html

<a href="http://www.example.com/page">page</a>

Antwoord 5, autoriteit 17%

Je moet ervoor zorgen dat je ook Options -MultiViewshebt.

Geen van bovenstaande werkte voor mij op een standaard cPanel-host.

Dit werkte:

Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.html [NC,L]

Antwoord 6, autoriteit 11%

Bedankt voor uw antwoorden. Ik heb mijn probleem al opgelost. Stel dat ik mijn pagina’s heb onder http://www.yoursite.com/htmlzijn de volgende .htaccess-regels van toepassing.

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

Antwoord 7, autoriteit 9%

Voor degenen die Firebase-hosting gebruiken, werkt geen van de antwoorden op deze pagina. Omdat u .htaccessin Firebase-hosting. U moet het Firebase.json-bestand configureren. Voeg gewoon de regel toe "cleanUrls": truein uw bestand en sla het op. Dat is het.

Na het toevoegen van de lijn Firebase.json zal er als volgt uitzien:

{
  "hosting": {
    "public": "public",
    "cleanUrls": true, 
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ]
  }
}

8, Autoriteit 5%

Ik gebruik dit .htacess voor het verwijderen van .html-extband van mijn URL-site, verifieer dit dit is de juiste code:

   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]

9, Autoriteit 5%

Goede vraag, maar het lijkt in de war te hebben. De antwoorden zijn bijna even verdeeld tussen degenen die dachten dat Dave (het OP) zijn HTML-pagina’s zonder de .html–xtensie opslaat, en degenen die dachten dat hij ze als normaal was (met .html), maar die de URL willen laten verschijnen. Hoewel de vraag een beetje beter had kunnen zijn, denk ik dat het duidelijk is wat hij bedoelde. Als hij pagina’s opslas zonder .html, zijn twee vraag (‘Hoe moet het verwijderen van .html’) en (hoe u een URL met .html ‘) zou kunnen doorverwijzen, precies dezelfde vraag! Dus dat interpretatie niet logisch is. Ook zijn eerste opmerking (over het vermijden van een oneindige lus) en zijn eigen antwoord lijken dit te bevestigen.

Dus laten we beginnen met het opnieuw informeren van de vraag en de taak af te breken. We willen twee dingen bereiken:

  1. Verwijder de .htmlals het deel uitmaakt van de gevraagde URL (b.v. /page.html)
  2. Point de bijgesneden URL (b.v. /page) Terug naar het werkelijke bestand (/page.html).

Er is niets moeilijks om een ​​van deze dingen te doen. (We kunnen de tweede behalen door eenvoudigweg door multiviews te gebruiken.) De uitdaging hier doet ze zowel zonder een oneindige lus te maken.

Daves eigen antwoord heeft de klus geklaard, maar het is behoorlijk ingewikkeld en helemaal niet draagbaar. (Sorry Dave.) Łukasz Habrzyk lijkt het antwoord van Anmol te hebben opgeschoond, en uiteindelijk verbeterde Amit Verma ze allebei. Geen van hen legde echter uit hoehun oplossingen het fundamentele probleem oplosten: hoe een oneindige lus te vermijden. Zoals ik het begrijp, werken ze omdat de variabele THE_REQUESThet oorspronkelijke verzoek van de browser bevat. Als zodanig wordt de voorwaarde (RewriteCond %{THE_REQUEST}) maar één keer geactiveerd. Omdat het niet wordt geactiveerd bij een herschrijving, vermijdt u het scenario met een oneindige lus. Maar dan heb je te maken met het volledige HTTP-verzoek—GET, HTTPen alles—dat gedeeltelijk enkele van de lelijkere regexvoorbeelden op deze pagina verklaart.

Ik ga nog een benadering aanbieden, die volgens mij gemakkelijker te begrijpen is. Ik hoop dat dit toekomstige lezers helpt de code die ze gebruiken te begrijpen, in plaats van alleen code te kopiëren en plakken die ze nauwelijks begrijpen en er het beste van hopen.

RewriteEngine on
# Remove .html (or htm) from visible URL (permanent redirect)
RewriteCond %{REQUEST_URI} ^/(.+)\.html?$ [nocase]
RewriteRule ^ /%1 [L,R=301]
# Quietly point back to the HTML file (temporary/undefined redirect):
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^ %{REQUEST_URI}.html [END]

Laten we het opsplitsen…

De eerste regel is vrij eenvoudig. De voorwaarde komt overeen met elke URL die eindigt op .html(of .htm) en verwijst door naar de URL zonder de bestandsnaamextensie. Het is een permanenteomleiding om aan te geven dat de bijgesneden URL de canonieke URL is één.

De tweede regel is ook eenvoudig. De eerste voorwaarde zal alleen passeren als de gevraagde bestandsnaam niet een geldige map (!-d) is. De tweede zal alleen passeren als de bestandsnaam verwijst naar een geldig bestand (-f) met de toegevoegde .HTML-extensie. Als zowel passeren, voegt de reschrijfregel eenvoudig ‘.html’ aan de bestandsnaam toe. En dan gebeurt de magie … [END]. Ja, dat is alles wat nodig is om een ​​oneindige lus te voorkomen. De Apache herschrijver vlaggen Documentatie legt het uit:

Vlag [Einde] gebruiken eindigt niet alleen de huidige ronde van herschrijf
verwerking (zoals [L]), maar voorkomt ook een volgende herschrijving
verwerking van optreedt in per-directory (htaccess) context.


10, Autoriteit 4%

Volg het gebruik van .htaccessom de URL’s te herschrijven voor statische HTML is over het algemeen niet alleen onnodig, maar ook slecht voor de prestaties van uw website. Het inschakelen van .htaccessis ook een onnodige beveiligingslek – het uitschakelen van het uit elimineert een aanzienlijk aantal potentiële problemen. Dezelfde regels voor elk .htaccess-bestand kunnen in plaats daarvan in een <Directory>sectie voor die map, en het zal meer performant zijn als u vervolgens instelt AllowOverride Noneomdat het niet hoeft te controleren elke map voor een .htaccessbestand en veiliger omdat een aanvaller de Vhost-configuratie zonder root-toegang niet kan wijzigen.

Als u niet nodig hebt .htaccessIn een VPS-omgeving, kunt u deze volledig uitschakelen en betere prestaties van uw webserver krijgen.

Alles wat u hoeft te doen is uw individuele bestanden verplaatsen van een structuur zoals deze:

index.html
about.html
products.html
terms.html

Naar een structuur als deze:

index.html
about/index.html
products/index.html
terms/index.html

Uw webserver zal dan de juiste pagina’s weergeven – als u /about/laadt, zal hij dat behandelen als /about/index.html.

Dit zal de URL echter niet herschrijven als iemand de oude bezoekt, dus er zouden omleidingen nodig zijn als het met terugwerkende kracht zou worden toegepast op een bestaande site.


Antwoord 11

maak eerst een .htaccess-bestand en stel de inhoud in op –

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.html -f
RewriteRule ^(.*)$ $1.html

verwijder vervolgens .html uit al uw bestanden, bijv. test.html werd gewoon test en ook als je een bestand uit een ander bestand wilt openen, verwijder dan ook .html ervan en alleen de bestandsnaam


Antwoord 12

Om de .html-extensie van uw URL’s te verwijderen, kunt u de volgende code gebruiken in 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]

Bedankt


Antwoord 13

Gebruik een hash-tag.

Misschien niet precies wat je wilt, maar het lost het probleem van het verwijderen van de extensie op.

Zeg dat u een HTML-pagina hebt opgeslagen als about.htmlen u wilt niet dat PESKY-extensie u een hash-tag kunt gebruiken en omduidelijk bent naar de juiste pagina.

switch(window.location.hash.substring(1)){
      case 'about':
      window.location = 'about.html';
      break;
  }

routering naar yoursite.com#aboutbrengt u naar yoursite.com/about.html. Ik heb dit gebruikt om mijn links schoner te maken.


Antwoord 14

RewriteRule /(.+)(\.html)$ /$1 [R=301,L] 

Probeer dit 🙂 weet niet of het werkt.

Other episodes