【发布时间】:2017-10-24 02:24:54
【问题描述】:
在 Apache 2.2 的 mod_rewrite documentation 中,RewriteRule [R] 标志状态:
可以使用语法 [R=305] 指定任何有效的 HTTP 响应状态代码,如果未指定,则默认使用 302 状态代码。指定的状态代码不一定是重定向 (3xx) 状态代码。但是,如果状态代码超出重定向范围 (300-399),则替换字符串将被完全删除,并且就像使用 L 一样停止重写。
除了响应状态代码之外,您还可以使用其符号名称指定重定向状态:
temp(默认)、permanent或seeother。
然而,下面的 sn-p 代码似乎只允许使用“符号名称”:
# 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]
错误日志显示:
[Tue May 23 23:11:12 2017] [alert] [client 192.168.33.1] /var/www/html/ventus/.htaccess: RewriteRule: HTTP response code '308' for flag 'R'
但是,308 似乎是永久重定向的 HTTP 状态代码:https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/308
这是 Apache 中的错误还是我做错了什么?
【问题讨论】:
标签: .htaccess redirect mod-rewrite apache2.2 http-status-code-308