在Apache 2.2的mod_rewrite 文档[R]
中,RewriteRule标志指出:
可以使用语法 [R=305] 指定任何有效的 HTTP 响应状态代码,如果未指定,则默认使用 302 状态代码。指定的状态代码不一定是重定向 (3xx) 状态代码。但是,如果状态代码超出重定向范围 (300-399),则替换字符串将被完全删除,并停止重写,就像使用了 L 一样。
除了响应状态代码之外,您还可以使用其符号名称指定重定向状态:(
temp
默认)permanent
、 或seeother
。
然而,以下代码片段似乎只允许“符号名称”:
# Force HTTPS
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{HTTPS} off
# this works
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=permanent,NE]
# this doesn't work
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=308,NE]
错误日志显示:
[2017 年 5 月 23 日星期二 23:11:12] [警报] [客户端 192.168.33.1] /var/www/html/ventus/.htaccess: RewriteRule: 标志“R”的 HTTP 响应代码“308”无效
但是,308 似乎是永久重定向的 HTTP 状态代码:https ://developer.mozilla.org/en-US/docs/Web/HTTP/Status/308
这是 Apache 中的错误还是我做错了什么?