【问题标题】:Apache2 : too many redirects with .htaccessApache2:.htaccess 重定向太多
【发布时间】:2019-01-31 03:23:04
【问题描述】:

注意我已经看到了几个关于这个问题的问题,但没有一个能帮助我。

我使用以下 .htaccess 文件获得了太多重​​定向。我不是使用 .htaccess 的专家,但我认为它也可以处理https,我现在真的不必担心它。

RewriteCond %{HTTP} off
RewriteRule .* http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTP_HOST} !^\. [NC]
RewriteRule .* http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

### Remove trailing slash from all URLs

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

【问题讨论】:

    标签: apache .htaccess redirect


    【解决方案1】:

    首先这些规则是错误的:

    RewriteCond %{HTTP} off
    RewriteRule .* http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    

    您检查请求是否带有 htpps ,如果不是,您除了循环之外什么都不做,因为在这一行 RewriteRule .* http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 您不会将 http 更改为 https

    我们把所有的规则都复制到这里,把第一个条件规则中的http改成https

    RewriteCond %{HTTP} off
    RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    RewriteCond %{HTTP_HOST} !^\. [NC]
    RewriteRule .* http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    

    上述规则进行循环,因为每当第二个条件RewriteCond %{HTTP_HOST} !^\. [NC] 发生时,第一个条件RewriteCond %{HTTP} off 就会一次又一次地执行。

    我们举个例子:

    http://www.yourwebsite.com
    

    此请求将由第一个条件处理,并将被重定向到:

    https://www.yourwebsite.com
    

    然后,它会被第二个条件处理,因为它可以通过它,并且会被重定向到:

    http://www.yourwebsite.com
    

    再次,第一个条件,然后是第二个等等。这将产生更多的循环。

    像这样更改第一条规则:

    RewriteCond %{HTTP} off 
    RewriteCond %{HTTP_HOST} ^\. [NC]
    RewriteRule ^(.*)   https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    

    据我了解,您只想在这种情况下将请求 RewriteCond %{HTTP_HOST} ^\. 强制转换为 https,因为您将它们排除在外。

    注意:确保在测试前清空浏览器缓存。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-11
      • 1970-01-01
      • 1970-01-01
      • 2022-01-14
      • 1970-01-01
      • 1970-01-01
      • 2015-08-22
      • 1970-01-01
      相关资源
      最近更新 更多