Apache-2.4

Apache Httpd 2.4 重寫規則返回 301 重定向,但返回 302

  • June 22, 2018

我有兩個不同的例子,說明 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

您的問題是您沒有為 curl 使用適當的主機名。在匹配主機名example.com的條件下觸發重寫規則。如果您只是在使用,curl http://localhost那麼 httpd 會獲取主機名“localhost”並且規則不匹配。而是使用 curl 命令和指向 localhost 的 –proxy 參數(確保指定埠號!)和與預期主機名匹配的 url 參數。像這樣:

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

引用自:https://serverfault.com/questions/917791