htaccess将所有流量重定向到https

时间:2014-07-02 19:16:43

标签: .htaccess redirect https

在使用htaccess时,我是初学者所以请耐心等待我的愚蠢问题。我知道这已经得到了很多解决(例如hereherehere),但它似乎对我的情况不起作用。我的浏览器在我的htaccess文件中显示“重定向循环”错误:

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

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

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]

    # Trying to redirect to https
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</IfModule>

我知道在重定向到https之前,这可能与RewriteCondRewriteRule有关,但我真的不知道我在这里做什么而且我不知道知道要改变什么。

更新

可能有用的更多信息:

  1. 当我删除“重定向到https”代码并手动输入https://my.site.com时,它会加载正常。
  2. 此外,在我意外删除目录中的.htaccess文件之前,重定向到https的工作很有效。
  3. 我正在尝试重定向的应用程序驻留在另一个也有.htaccess文件的应用程序的子文件夹中。这是该应用程序的代码:

    <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] RewriteEngine On </IfModule>

  4. 这就是萤火虫所说的: 1st screenshot 2nd screenshot

1 个答案:

答案 0 :(得分:1)

更改规则的顺序,并在其他内部重写规则之前保留301规则:

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

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

    # Trying to redirect to https
    RewriteCond %{HTTPS} off
    RewriteCond %{SERVER_PORT} !=443
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,NE,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]

</IfModule>