How to remove .html from URL?

前端 未结 12 1548
轻奢々
轻奢々 2020-11-22 03:02

How to remove .html from the URL of a static page?

Also, I need to redirect any url with .html to the one without it. (i.e. www.exam

相关标签:
12条回答
  • 2020-11-22 03:24

    This should work for you:

    #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]
    
    0 讨论(0)
  • 2020-11-22 03:25

    I think some explanation of Jon's answer would be constructive. The following:

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

    checks that if the specified file or directory respectively doesn't exist, then the rewrite rule proceeds:

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

    But what does that mean? It uses regex (regular expressions). Here is a little something I made earlier...

    I think that's correct.

    NOTE: When testing your .htaccess do not use 301 redirects. Use 302 until finished testing, as the browser will cache 301s. See https://stackoverflow.com/a/9204355/3217306

    Update: I was slightly mistaken, . matches all characters except newlines, so includes whitespace. Also, here is a helpful regex cheat sheet

    Sources:

    http://community.sitepoint.com/t/what-does-this-mean-rewritecond-request-filename-f-d/2034/2

    https://mediatemple.net/community/products/dv/204643270/using-htaccess-rewrite-rules

    0 讨论(0)
  • 2020-11-22 03:28

    For those who are using Firebase hosting none of the answers will work on this page. Because you can't use .htaccess in Firebase hosting. You will have to configure the firebase.json file. Just add the line "cleanUrls": true in your file and save it. That's it.

    After adding the line firebase.json will look like this :

    {
      "hosting": {
        "public": "public",
        "cleanUrls": true, 
        "ignore": [
          "firebase.json",
          "**/.*",
          "**/node_modules/**"
        ]
      }
    }
    
    0 讨论(0)
  • 2020-11-22 03:29

    I use this .htacess for removing .html extantion from my url site, please verify this is correct 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]
    
    0 讨论(0)
  • 2020-11-22 03:29

    Resorting to using .htaccess to rewrite the URLs for static HTML is generally not only unnecessary, but also bad for you website's performance. Enabling .htaccess is also an unnecessary security vulnerability - turning it off eliminates a significant number of potential issues. The same rules for each .htaccess file can instead go in a <Directory> section for that directory, and it will be more performant if you then set AllowOverride None because it won't need to check each directory for a .htaccess file, and more secure because an attacker can't change the vhost config without root access.

    If you don't need .htaccess in a VPS environment, you can disable it entirely and get better performance from your web server.

    All you need to do is move your individual files from a structure like this:

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

    To a structure like this:

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

    Your web server will then render the appropriate pages - if you load /about/, it will treat that as /about/index.html.

    This won't rewrite the URL if anyone visits the old one, though, so it would need redirects to be in place if it was retroactively applied to an existing site.

    0 讨论(0)
  • 2020-11-22 03:29

    To remove the .html extension from your URLs, you can use the following code 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]
    

    Thanks

    0 讨论(0)
提交回复
热议问题