apache redirect from non www to www

前端 未结 24 895
春和景丽
春和景丽 2020-11-22 06:34

I have a website that doesn\'t seem to redirect from non-www to www.

My Apache configuration is as follows:

RewriteEngine On
### re-direct t         


        
相关标签:
24条回答
  • 2020-11-22 07:08

    Redirection code for both non-www => www and opposite www => non-www. No hardcoding domains and schemes in .htaccess file. So origin domain and http/https version will be preserved.

    APACHE 2.4 AND NEWER

    NON-WWW => WWW:

    RewriteEngine On
    RewriteCond %{HTTP_HOST} !^www\. [NC]
    RewriteRule ^ %{REQUEST_SCHEME}://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
    

    WWW => NON-WWW:

    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
    RewriteRule ^ %{REQUEST_SCHEME}://%1%{REQUEST_URI} [R=301,L]
    

    Note: not working on Apache 2.2 where %{REQUEST_SCHEME} is not available. For compatibility with Apache 2.2 use code below or replace %{REQUEST_SCHEME} with fixed http/https.


    APACHE 2.2 AND NEWER

    NON-WWW => WWW:

    RewriteEngine On
    
    RewriteCond %{HTTPS} off
    RewriteCond %{HTTP_HOST} !^www\. [NC]
    RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
    
    RewriteCond %{HTTPS} on
    RewriteCond %{HTTP_HOST} !^www\. [NC]
    RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
    

    ... or shorter version ...

    RewriteEngine On
    RewriteCond %{HTTP_HOST} !^www\. [NC]
    RewriteCond %{HTTPS}s ^on(s)|offs
    RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
    

    WWW => NON-WWW:

    RewriteEngine On
    
    RewriteCond %{HTTPS} off
    RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
    RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L]
    
    RewriteCond %{HTTPS} on
    RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
    RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L]
    

    ... shorter version not possible because %N is available only from last RewriteCond ...

    0 讨论(0)
  • This is simple!

    RewriteEngine On
    RewriteCond %{HTTP_HOST} !^www\. [NC]
    RewriteRule ^(.*)$ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
    
    0 讨论(0)
  • 2020-11-22 07:09

    To 301 redirect all requests made directly to the domain to www you can use:

    RewriteEngine On
    
    RewriteCond %{HTTP_HOST} !^([^.]+\.[^.]+){2,}$ [NC]
    RewriteRule ^(.*)$ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
    

    The benefit of this is that this will work if you have any valid subdomains, e.g.

    example.com REDIRECTED TO www.example.com

    foo.example.com NO REDIRECT

    bar.example.com NO REDIRECT

    0 讨论(0)
  • 2020-11-22 07:11

    http://example.com/subdir/?lold=13666 => http://www.example.com/subdir/?lold=13666

    RewriteEngine On
    RewriteCond %{HTTP_HOST} !^www\. [NC]
    RewriteRule ^(.*)$ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
    
    0 讨论(0)
  • 2020-11-22 07:11

    If you are using Apache 2.4 ,without the need to enable the rewrite apache module you can use something like this:

    # non-www to www
    <If "%{HTTP_HOST} = 'domain.com'">
      Redirect 301 "/" "http://www.domain.com/"
    </If>
    
    0 讨论(0)
  • 2020-11-22 07:12

    I ran this...

     RewriteEngine on
     RewriteCond %{HTTP_HOST} !^www.*$ [NC]
     RewriteRule ^/.+www\/(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
    

    I need this to be universal for 25+ domains on our new server, so this directive is in my virtual.conf file in a <Directory> tag. (dir is parent to all docroots)

    I had to do a bit of a hack on the rewrite rule though, as the full docroot was being carried through on the pattern match, despite what http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html says about it only being stuff after the host and port.

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