在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重定向。有没有办法做到这一点?
答案 0 :(得分:0)
第一个重定向(您谈到的那个)按预期工作,并将用户发送到带有301的新页面。但是,看起来您正在使用的系统强制使用' /'在URI的末尾,并因此而进行另一次重定向。
也许这样的事情会更好:
RewriteCond %{REQUEST_URI} ^/?mysite/?
RewriteRule (.*)mysite/(.*)/? https://www.example.com/$1$2/ [R=301,L]
然而,你的踪迹显示了4个重定向...我不太清楚我理解为什么还有2个重定向。