在Question2Answer脚本中正确地将HTTP重定向到HTTPS

时间:2014-12-30 07:02:33

标签: apache .htaccess mod-rewrite redirect question2answer

我已经搜索了这个问题很多天了,尝试了很多不同的方法但到目前为止没有任何工作。我正在使用Question2Answer脚本,我想将所有HTTP请求重定向到HTTPS。

我的网址结构设置为:

/123/why-do-birds-sing (requires htaccess file)

和htaccess文件如下:

DirectoryIndex index.php
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} ^(.*)//(.*)$
RewriteRule . %1/%2 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ index.php?qa-rewrite=$0&%{QUERY_STRING} [L]
RewriteCond %{HTTP:CF-Visitor} '"scheme":"http"'
RewriteRule ^(.*)$ https://example.com/$1 [L,R=301]
</IfModule>

这正确地将http://example.com重定向到https://example.com。但是,如果用户输入如下地址:www.example.com/users,则会将其重定向到https://example.com/index.php?qa-rewrite=users,这会返回404错误。

自动添加index.php?qa-rewrite=并将其从htaccess中删除完全搞砸了所有内容,我认为它应该存在。

1 个答案:

答案 0 :(得分:0)

这是因为您需要所有重定向规则之前任何路由规则(没有R标志的规则),所以:

DirectoryIndex index.php
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} ^(.*)//(.*)$
RewriteRule . %1/%2 [R=301,L]
RewriteCond %{HTTP:CF-Visitor} '"scheme":"http"'
RewriteRule ^(.*)$ https://example.com/$1 [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ index.php?qa-rewrite=$0&%{QUERY_STRING} [L]
</IfModule>