Apache mod_rewrite使用302而不是https重定向到http

时间:2014-08-14 02:36:14

标签: apache mod-rewrite http-status-code-301 http-status-code-302

在apache 2.2中我使用的是mod_rewrite,我有一个重写规则 -

RewriteCond %{REQUEST_URI} ^/?mysite/?
RewriteRule (.*)mysite/(.*) $1$2 [R=301,L]

这会重写此网址 -

https://www.domain.com/mysite/about/

https://www.domain.com/about/

规则似乎有效。但是当我在chrome开发人员工具或httpwatch中看到网络跟踪时,我可以看到带有302协议的重定向。下面的跟踪(我已经从跟踪中移除了时间并仅复制了重定向)

GET 301 Redirect to http://www.domain.com/about     https://www.domain.com/mysite/about
GET 302 Redirect to https://www.domain.com/about    http://www.domain.com/about
GET 302 Redirect to http://www.domain.com/about/    https://www.domain.com/about
GET 302 Redirect to https://www.domain.com/about/   http://www.domain.com/about/
GET 200 html    https://www.domain.com/about/

我想避免将302重定向到http:// ......并根据我的重写规则进行301重定向。有没有办法做到这一点?

1 个答案:

答案 0 :(得分:0)

第一个重定向(您谈到的那个)按预期工作,并将用户发送到带有301的新页面。但是,看起来您正在使用的系统强制使用' /'在URI的末尾,并因此而进行另一次重定向。

也许这样的事情会更好:

RewriteCond %{REQUEST_URI} ^/?mysite/?
RewriteRule (.*)mysite/(.*)/? https://www.example.com/$1$2/ [R=301,L]

然而,你的踪迹显示了4个重定向...我不太清楚我理解为什么还有2个重定向。