在 apache 2.2 中,我正在使用 mod_rewrite 并且我有一个重写规则为 -
RewriteCond %{REQUEST_URI} ^/?mysite/?
RewriteRule (.*)mysite/(.*) $1$2 [R=301,L]
这重写了这个 url -
https://www.domain.com/mysite/about/
到
https://www.domain.com/about/
这条规则似乎有效。但是当我在 chrome 开发人员工具或 httpwatch 中看到网络跟踪时,我可以看到使用 302 的 http 协议(protocol)的重定向。跟踪在下面(我已经从跟踪中删除了时间并仅复制了重定向)
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 重定向。有办法做到这一点吗?
最佳答案
第一个重定向(您所说的那个)按预期工作,并使用 301 将用户发送到新页面。但是,看起来您正在使用的系统强制在 URI 末尾添加一个“/”,并且因此进行另一个重定向。
也许像这样的东西会更好:
RewriteCond %{REQUEST_URI} ^/?mysite/?
RewriteRule (.*)mysite/(.*)/? https://www.example.com/$1$2/ [R=301,L]
但是您的跟踪显示了 4 个重定向...我不太确定我理解为什么那里有额外的 2 个重定向。
关于Apache mod_rewrite 使用 302 而不是 https 重定向到 http,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25299180/