Apache Httpd 2.4 重写规则返回 301 重定向,但返回 302

Apache Httpd 2.4 重写规则返回 301 重定向,但返回 302

我有两个不同的例子,其中 Centos7 上的 Apache Httpd 2.4 配置为使用 R=301 标志执行重定向,但它们实际上返回 302 重定向。一个是极其简单的情况,只是将 http 重定向到 https。以下是重写规则的范围:

<VirtualHost ...>
  ... other content ...
  RewriteEngine On
  RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
  RewriteCond %{HTTP:X-Forwarded-Proto} !https
  RewriteRule ^/(.*)$ https://%{HTTP_HOST}/$1 [NC,R=301,L]
</VirtualHost>

为什么返回 302 重定向而不是 301?

# apachectl -S
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80                   example.com (/etc/httpd/sites- 
enabled/example.com.conf:5)
*:443                  example.com (/etc/httpd/sites- 
enabled/example.com.conf:23)
Syntax OK

答案1

您的问题是您没有为 curl 使用适当的主机名。重写规则是在匹配主机名的条件下触发的示例.com。如果您只是使用,curl http://localhost那么 httpd 将获取主机名“localhost”,并且规则不匹配。而是使用 curl 命令,其中的 --proxy 参数指向 localhost(请务必指定端口号!)和与预期主机名匹配的 url 参数。如下所示:

curl --proxy localhost:80 http://example.com

相关内容