迁移到https后的htaccess问题(网站+ KeyCDN)

时间:2017-03-15 17:20:43

标签: apache .htaccess ssl https http-status-code-301

我有一个我无法解决的问题,尽管在论坛上进行了数小时的测试和阅读。

昨天我按照以下步骤从http迁移到https:

  1. 在我的主机面板中激活SSL证书(我的网站的共享Apache主机中包含的Let's Encrypt证书)
  2. 将所有硬编码链接更新为HTTPS(规范网址,js等+每个硬编码的KeyCDN链接)
    • 使用this tool检查每个页面:“未发现任何问题”
  3. 在我的KeyCDN面板中启用共享SSL +强制SSL:“已启用”+更新原始网址(http到https)
  4. 清除KeyCDN缓存
  5. 在此步骤中,我必须在我的htacess中将301重定向写入https,以完成此过程。

    但是:已经在我的htaccess中编码的301重定向不再有效了。 我从昨天起就不得不停用我的htaccess文件,这对我的SEO来说是一个很大的问题。

    错误消息:“重定向太多”

    这是我的htaccess:

    <files .htaccess>
    order allow,deny
    deny from all
    </files>
    
    Options -Indexes
    ErrorDocument 403 http://www.example.com
    ErrorDocument 404 /404.html
    
    ##  CANONICAL DOMAIN WITH 301 REWRITE WITHOUT WWW TO WWW
    RewriteEngine on
    RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
    RewriteRule ^(.*)$ http://www.example.com/$1 [QSA,L,R=301]
    
    ##  301 REWRITE WITHOUT .HTML AT THE END OF FILES
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME}\.html -f
    RewriteRule ^(.*)$ $1.html
    
    ##  OLD SITE WITH 301 REWRITE WITHOUT INDEX.HTML/.PHP IN URLS
    RewriteEngine On
    Redirect 301 /index.php  http://www.example.com
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^/]+/)*index\.html?\ HTTP/
    RewriteRule ^(([^/]+/)*)index\.html?$ http://www.example.com/$1 [R=301,L]
    
    ##  301 REWRITE FOR MOVED PAGES
    Redirect 301 /old-url-1 http://www.example.com/new-url-1
    

    我尝试了很多代码来实现301从http重定向到https,例如:

    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
    

    没有任何作用:即使使用之前的htaccess,网站也不再显示(“太多重定向”),我不得不停用。

    请你帮我,写好301重定向:

    • 从http到https,
    • 没有www到www,
    • 没有.html文件扩展名
    • 在我的目录末尾没有斜杠(/)

    我的网站仅使用html / css(无CMS)构建。

    提前感谢您,因为我认为其他地方存在重定向冲突。

1 个答案:

答案 0 :(得分:0)

以下是答案:

<files .htaccess>
order allow,deny
deny from all
</files>

Options +FollowSymlinks
Options -MultiViews
RewriteEngine on

RewriteRule ^/normal/secure(/.*) https://%{HTTP_HOST}$1 [R=301,L]
RewriteCond %{THE_REQUEST} /([^.]+)\.html [NC]
RewriteRule ^ /%1 [NC,L,R]

RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^ %{REQUEST_URI}.html [NC,L]
RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [QSA,L,R=301]

<FilesMatch "\.(woff)$">
Header unset Vary
</FilesMatch>

<FilesMatch "\.(eot)$">
Header unset Vary
</FilesMatch>