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

标签 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]

这重写了这个 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/

相关文章:

php - 在 php 7.2 的 laragon 上安装 php-decimal 扩展,找不到指定的模块。扩展小数点不存在

apache - CentOS 上 Apache SSL 代理背后的 Jira

linux - 将 Apache 重写规则(前端 Controller )转换为 Nginx

php - 301页面能被google抓取吗?

.htaccess - 如果第一个域有文件夹路径,我如何 301 将一个域重定向到另一个域

wordpress - 通过 Varnish/Apache On Wordpress 使用 Nginx SSL 终止重定向循环

java - 生产环境: Spring security login success redirect to localhost

apache - 使用 .htaccess 匹配重写规则中的问号

.htaccess 子域的通配符 SSL

SEO - 临时未发布的页面 - 要返回哪个 http 状态代码?