htaccess永久重定向抛出内部服务器错误

时间:2017-05-23 23:23:41

标签: .htaccess redirect mod-rewrite apache2.2 http-status-code-308

在Apache的mod_rewrite documentation中,RewriteRule [R]标志声明:

  

可以使用语法[R = 305]指定任何有效的HTTP响应状态代码,如果没有指定,则默认使用302状态代码。指定的状态代码不一定是重定向(3xx)状态代码。但是,如果状态代码超出重定向范围(300-399),则替换字符串将完全删除,并且重写将停止,就像使用了L一样。

     

除了回复状态代码,您还可以使用其符号名称指定重定向状态:temp(默认),permanentseeother

但是,以下代码片段似乎只允许使用"符号名称":

# 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响应代码无效' 308'为国旗' R'

但是,308似乎是永久重定向的HTTP状态代码:https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/308

这是Apache中的错误还是我做错了什么?

2 个答案:

答案 0 :(得分:1)

您不能将308与您的apache版本(2.2)一起使用。在apache 2.4.3中添加了对308状态的支持:https://archive.apache.org/dist/httpd/CHANGES_2.4.3

  

核心:添加在IANA注册的缺少的HTTP状态代码。

答案 1 :(得分:0)

是的,这是一个错误。您对文档的解释是正确的,应该接受300-399之间的所有代码。

相关问题