Issue In Removing Double Or More Slashes From URL By .htaccess

后端 未结 4 1827
遥遥无期
遥遥无期 2020-12-09 11:27

I am using the following htaccess rul to remove double or more slashes from web urls:

#remove double/more slashes in url
RewriteCond %{REQUEST_URI} ^(.*)//(.         


        
相关标签:
4条回答
  • 2020-12-09 12:10

    To prevent long repetition of characters in your url such as:

    http://demo.codesamplez.com/html5///////////////////////////////////////////audio
    

    you can do:

    RewriteCond %{REQUEST_METHOD}  !=POST
    RewriteCond %{REQUEST_URI} ^(.*?)(/{2,})(.*)$
    RewriteRule . %1/%3 [R=301,L]
    

    It should works with :

    http://demo.codesamplez.com//html5/audio
    

    see also: .htaccess - how to remove repeated characters from url?

    0 讨论(0)
  • 2020-12-09 12:16

    Give it a try with:

    RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/{2,} [NC]
    RewriteRule ^(.*) $1 [R=301,L]
    

    It should redirect to a single slash at the end of the domain. And an improvement on yours:

    RewriteCond %{REQUEST_URI} ^(.*)/{2,}(.*)$
    RewriteRule . %1/%2 [R=301,L]
    
    0 讨论(0)
  • 2020-12-09 12:28

    For me, the following rules work perfectly:

    <IfModule mod_rewrite.c>
        RewriteBase /
    
        # rule 1: remove multiple leading slashes (directly after the TLD)
        RewriteCond %{THE_REQUEST} \s/{2,}
        RewriteRule (.*) $1 [R=301,L]
    
        # rule 2: remove multiple slashes in the requested path
        RewriteCond %{REQUEST_URI} ^(.*)/{2,}(.*)$
        RewriteRule (.*) %1/%2 [R=301,L]
    </IfModule>
    

    The idea is heavily based on Marcels answer (thanks!), but this one is a bit more lightweight and includes the RewriteBase, which may be helpful if you work with specific subdirectory structures. Additionally, Marcels answer lacks explanation, which I wanted to fix:

    Rule 1: {THE_REQUEST} contains something like GET /index.html HTTP/1.1 (see docs). Hence, if we match the first whitespace (\s) followed by multiple slashes (/{2,}), we can access the correct URL without the leading double slash via $1.

    Rule 2: The regular expression ^(.*)/{2,}(.*)$ splits the request URI on multiple slashes. %1/%2 then combines the two splitted strings again, but with only one slash at this time.

    0 讨论(0)
  • 2020-12-09 12:33

    As per this link, following code should take care of extra slashes(anywhere) in URL.

    RewriteCond %{THE_REQUEST} //
    RewriteRule ^.*$ $0 [R=302,L,NE]
    
    0 讨论(0)
提交回复
热议问题