如何从域名中删除www并强制执行https?

拉胡尔

我要实现两件事

  1. 从域名中删除www
  2. 强制执行https

IE

http:// www.example.org  should be redirect to https://example.org
https:// www.example.org  should be redirect to https://example.org

更新:

我目前正在使用以下.htaccess规则

<IfModule mod_rewrite.c>
  RewriteCond %{HTTPS} !=on
  RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
  RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L]
</IfModule>

如果存在,此规则会从网址中删除www,我将用户重定向到https。仅当我在网址中有www时才会发生这种情况。如果我使用http://exampl.org访问我的网站,它不会将其重定向到https。我该如何实现两者?

1)从网址中删除www

2)启用https

这是我的htaccess文件,我一直在尝试提到的答案,但似乎没有用

  # ----------------------------------------------------------------------
  # Better website experience for IE users
  # ----------------------------------------------------------------------

    # Force the latest IE version, in various cases when it may fall back to IE7 mode
    #  github.com/rails/rails/commit/123eb25#commitcomment-118920
    # Use ChromeFrame if it's installed for a better experience for the poor IE folk

    <IfModule mod_headers.c>
      Header set X-UA-Compatible "IE=Edge,chrome=1"
      # mod_headers can't match by content-type, but we don't want to send this header on *everything*...
      <FilesMatch "\.(js|css|gif|png|jpe?g|pdf|xml|oga|ogg|m4a|ogv|mp4|m4v|webm|svg|svgz|eot|ttf|otf|woff|ico|webp|appcache|manifest|htc|crx|oex|xpi|safariextz|vcf)$" >
        Header unset X-UA-Compatible
      </FilesMatch>
    </IfModule>

    # ----------------------------------------------------------------------
    # CORS-enabled images (@crossorigin)
    # ----------------------------------------------------------------------

    # Send CORS headers if browsers request them; enabled by default for images.
    # developer.mozilla.org/en/CORS_Enabled_Image
    # blog.chromium.org/2011/07/using-cross-domain-images-in-webgl-and.html
    # hacks.mozilla.org/2011/11/using-cors-to-load-webgl-textures-from-cross-domain-images/
    # wiki.mozilla.org/Security/Reviews/crossoriginAttribute

    <IfModule mod_setenvif.c>
      <IfModule mod_headers.c>
        # mod_headers, y u no match by Content-Type?!
        <FilesMatch "\.(gif|png|jpe?g|svg|svgz|ico|webp)$">
          SetEnvIf Origin ":" IS_CORS
          Header set Access-Control-Allow-Origin "*" env=IS_CORS
        </FilesMatch>
      </IfModule>
    </IfModule>


    # ----------------------------------------------------------------------
    # Webfont access
    # ----------------------------------------------------------------------

    # Allow access from all domains for webfonts.
    # Alternatively you could only whitelist your
    # subdomains like "subdomain.example.com".

    <IfModule mod_headers.c>
      <FilesMatch "\.(ttf|ttc|otf|eot|woff|font.css)$">
        Header set Access-Control-Allow-Origin "*"
      </FilesMatch>
    </IfModule>


    # ----------------------------------------------------------------------
    # Proper MIME type for all files
    # ----------------------------------------------------------------------

    # JavaScript
    #   Normalize to standard type (it's sniffed in IE anyways)
    #   tools.ietf.org/html/rfc4329#section-7.2
    AddType application/javascript         js jsonp
    AddType application/json               json

    # Audio
    AddType audio/ogg                      oga ogg
    AddType audio/mp4                      m4a f4a f4b

    # Video
    AddType video/ogg                      ogv
    AddType video/mp4                      mp4 m4v f4v f4p
    AddType video/webm                     webm
    AddType video/x-flv                    flv

    # SVG
    #   Required for svg webfonts on iPad
    #   twitter.com/FontSquirrel/status/14855840545
    AddType     image/svg+xml              svg svgz
    AddEncoding gzip                       svgz

    # Webfonts
    AddType application/vnd.ms-fontobject  eot
    AddType application/x-font-ttf         ttf ttc
    AddType font/opentype                  otf
    AddType application/x-font-woff        woff

    # Assorted types
    AddType image/x-icon                        ico
    AddType image/webp                          webp
    AddType text/cache-manifest                 appcache manifest
    AddType text/x-component                    htc
    AddType application/xml                     rss atom xml rdf
    AddType application/x-chrome-extension      crx
    AddType application/x-opera-extension       oex
    AddType application/x-xpinstall             xpi
    AddType application/octet-stream            safariextz
    AddType application/x-web-app-manifest+json webapp
    AddType text/x-vcard                        vcf
    AddType application/x-shockwave-flash       swf
    AddType text/vtt                            vtt

    # ----------------------------------------------------------------------
    # Gzip compression
    # ----------------------------------------------------------------------

    <IfModule mod_deflate.c>

      # Force deflate for mangled headers developer.yahoo.com/blogs/ydn/posts/2010/12/pushing-beyond-gzipping/
      <IfModule mod_setenvif.c>
        <IfModule mod_headers.c>
          SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding
          RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding
        </IfModule>
      </IfModule>

      # Compress all output labeled with one of the following MIME-types
      <IfModule mod_filter.c>
        AddOutputFilterByType DEFLATE application/atom+xml \
                                      application/javascript \
                                      application/json \
                                      application/rss+xml \
                                      application/vnd.ms-fontobject \
                                      application/x-font-ttf \
                                      application/xhtml+xml \
                                      application/xml \
                                      font/opentype \
                                      image/svg+xml \
                                      image/x-icon \
                                      text/css \
                                      text/html \
                                      text/plain \
                                      text/x-component \
                                      text/xml
      </IfModule>

    </IfModule>


    # ----------------------------------------------------------------------
    # Expires headers (for better cache control)
    # ----------------------------------------------------------------------

    # These are pretty far-future expires headers.
    # They assume you control versioning with filename-based cache busting
    # Additionally, consider that outdated proxies may miscache
    #   www.stevesouders.com/blog/2008/08/23/revving-filenames-dont-use-querystring/

    # If you don't use filenames to version, lower the CSS and JS to something like
    # "access plus 1 week".

    <IfModule mod_expires.c>
      ExpiresActive on

    # Perhaps better to whitelist expires rules? Perhaps.
      ExpiresDefault                          "access plus 1 month"

    # cache.appcache needs re-requests in FF 3.6 (thanks Remy ~Introducing HTML5)
      ExpiresByType text/cache-manifest       "access plus 0 seconds"

    # Your document html
      ExpiresByType text/html                 "access plus 0 seconds"

    # Data
      ExpiresByType text/xml                  "access plus 0 seconds"
      ExpiresByType application/xml           "access plus 0 seconds"
      ExpiresByType application/json          "access plus 0 seconds"

    # Feed
      ExpiresByType application/rss+xml       "access plus 1 hour"
      ExpiresByType application/atom+xml      "access plus 1 hour"

    # Favicon (cannot be renamed)
      ExpiresByType image/x-icon              "access plus 1 week"

    # Media: images, video, audio
      ExpiresByType image/gif                 "access plus 1 month"
      ExpiresByType image/png                 "access plus 1 month"
      ExpiresByType image/jpeg                "access plus 1 month"
      ExpiresByType video/ogg                 "access plus 1 month"
      ExpiresByType audio/ogg                 "access plus 1 month"
      ExpiresByType video/mp4                 "access plus 1 month"
      ExpiresByType video/webm                "access plus 1 month"

    # HTC files  (css3pie)
      ExpiresByType text/x-component          "access plus 1 month"

    # Webfonts
      ExpiresByType application/x-font-ttf    "access plus 1 month"
      ExpiresByType font/opentype             "access plus 1 month"
      ExpiresByType application/x-font-woff   "access plus 1 month"
      ExpiresByType image/svg+xml             "access plus 1 month"
      ExpiresByType application/vnd.ms-fontobject "access plus 1 month"

    # CSS and JavaScript
      ExpiresByType text/css                  "access plus 1 year"
      ExpiresByType application/javascript    "access plus 1 year"

    </IfModule>

    # ----------------------------------------------------------------------
    # ETag removal
    # ----------------------------------------------------------------------

    # FileETag None is not enough for every server.
    <IfModule mod_headers.c>
      Header unset ETag
    </IfModule>

    # Since we're sending far-future expires, we don't need ETags for
    # static content.
    #   developer.yahoo.com/performance/rules.html#etags
    FileETag None

    # ----------------------------------------------------------------------
    # Start rewrite engine
    # ----------------------------------------------------------------------

    # Turning on the rewrite engine is necessary for the following rules and
    # features. FollowSymLinks must be enabled for this to work.

    # Some cloud hosting services require RewriteBase to be set: goo.gl/HOcPN
    # If using the h5bp in a subdirectory, use `RewriteBase /foo` instead where
    # 'foo' is your directory.

    # If your web host doesn't allow the FollowSymlinks option, you may need to
    # comment it out and use `Options +SymLinksIfOwnerMatch`, but be aware of the
    # performance impact: goo.gl/Mluzd

    <IfModule mod_rewrite.c>
      Options +FollowSymlinks
    # Options +SymLinksIfOwnerMatch
      RewriteEngine On
    # RewriteBase /
    </IfModule>


    # ----------------------------------------------------------------------
    # Suppress or force the "www." at the beginning of URLs
    # ----------------------------------------------------------------------

    # The same content should never be available under two different URLs -
    # especially not with and without "www." at the beginning, since this can cause
    # SEO problems (duplicate content). That's why you should choose one of the
    # alternatives and redirect the other one.

    # By default option 1 (no "www.") is activated.
    # no-www.org/faq.php?q=class_b

    # If you'd prefer to use option 2, just comment out all option 1 lines
    # and uncomment option 2.

    # IMPORTANT: NEVER USE BOTH RULES AT THE SAME TIME!

    # ----------------------------------------------------------------------

    # Option 1:
    # Rewrite "www.example.com -> example.com".

    #<IfModule mod_rewrite.c>
     # RewriteCond %{HTTPS} !=on
     # RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
     # RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L]
    #</IfModule>

    <IfModule mod_rewrite.c>
      RewriteEngine On

        #RewriteCond %{HTTPS} off [OR]
        #RewriteCond %{HTTP:X-Forwarded-SSL} off [OR]
        #RewriteCond %{HTTP_HOST} ^www\.
        #RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$
        #RewriteRule ^ https://%1%{REQUEST_URI} [NE, L, R]

        #RewriteCond %{SERVER_PORT} ^80$
        #RewriteRule ^(.*)$ https://%{SERVER_NAME} %{REQUEST_URI} [R=301,L]

        RewriteCond %{HTTPS} off [OR]
      RewriteCond %{HTTP_HOST} ^www\.
      RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$
      RewriteRule ^ https://%1%{REQUEST_URI} [NE,L,R]


        #RewriteCond %{HTTP_HOST} ^(^www\.)
        #RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
        #RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L]
    </IfModule>

    #<IfModule mod_rewrite.c>
    #  RewriteEngine On
    #  RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
    #  RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L]
    #  RewriteCond %{HTTPS} !=on
    #  RewriteCond %{SERVER_PORT} 80
    #  RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R,L]
    #</IfModule>

    # ----------------------------------------------------------------------
    # Prevent 404 errors for non-existing redirected folders
    # ----------------------------------------------------------------------

    # without -MultiViews, Apache will give a 404 for a rewrite if a folder of the
    # same name does not exist.
    # webmasterworld.com/apache/3808792.htm

    Options -MultiViews


    # ----------------------------------------------------------------------
    # Custom 404 page
    # ----------------------------------------------------------------------

    # You can add custom pages to handle 500 or 403 pretty easily, if you like.
    # If you are hosting your site in subdirectory, adjust this accordingly
    #    e.g. ErrorDocument 404 /subdir/404.html
    ErrorDocument 404 /404.html


    # ----------------------------------------------------------------------
    # UTF-8 encoding
    # ----------------------------------------------------------------------

    # Use UTF-8 encoding for anything served text/plain or text/html
    AddDefaultCharset utf-8

    # Force UTF-8 for a number of file formats
    AddCharset utf-8 .atom .css .js .json .rss .vtt .xml


    # ----------------------------------------------------------------------
    # A little more security
    # ----------------------------------------------------------------------

    # To avoid displaying the exact version number of Apache being used, add the
    # following to httpd.conf (it will not work in .htaccess):
    # ServerTokens Prod

    # "-Indexes" will have Apache block users from browsing folders without a
    # default document Usually you should leave this activated, because you
    # shouldn't allow everybody to surf through every folder on your server (which
    # includes rather private places like CMS system folders).
    <IfModule mod_autoindex.c>
      Options -Indexes
    </IfModule>

    # Block access to "hidden" directories or files whose names begin with a
    # period. This includes directories used by version control systems such as
    # Subversion or Git.
    <IfModule mod_rewrite.c>
      RewriteCond %{SCRIPT_FILENAME} -d [OR]
      RewriteCond %{SCRIPT_FILENAME} -f
      RewriteRule "(^|/)\." - [F]
    </IfModule>

    # Block access to backup and source files. These files may be left by some
    # text/html editors and pose a great security danger, when anyone can access
    # them.
    <FilesMatch "(\.(bak|config|sql|fla|psd|ini|log|sh|inc|swp|dist)|~)$">
      Order allow,deny
      Deny from all
      Satisfy All
    </FilesMatch>

    # Increase cookie security
    <IfModule php5_module>
      php_value session.cookie_httponly true
    </IfModule>



    <IfModule mod_rewrite.c>
        RewriteEngine On

        #<IfModule mod_vhost_alias.c>
        #    RewriteBase /
        #</IfModule>

        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule ^(.*)$ app.php [QSA,L]


    </IfModule>
拉胡尔

最终,我按照以下htaccess规则进行工作,正如我的评论中提到的,由于我的环境中安装了弹性负载平衡器,其他答案中发布的规则不起作用。通过ELB的所有HTTPS请求的X-FORWARDED-PROTO值将等于“ HTTPS”。

RewriteEngine on
RewriteCond %{HTTP_HOST} www.(.+) [OR,NC]   
RewriteCond %{HTTP:X-Forwarded-Proto} !https [NC]
RewriteRule ^/?(.*) http s://mydomain.com%{REQUEST_URI} [L,R=301]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章