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