htaccess 永久重定向引发内部服务器错误

Posted

技术标签:

【中文标题】htaccess 永久重定向引发内部服务器错误【英文标题】:htaccess permanent redirect throws Internal Server Error 【发布时间】:2017-10-24 02:24:54 【问题描述】:

在 Apache 2.2 的 mod_rewrite documentation 中,RewriteRule [R] 标志状态:

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

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

然而,下面的 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 中的错误还是我做错了什么?

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

以上是关于htaccess 永久重定向引发内部服务器错误的主要内容,如果未能解决你的问题,请参考以下文章

.htaccess 将查询字符串附加到内部重定向

.htaccess 内部重定向不适用于字符串参数

.htaccess - 递归地将斜杠映射到下划线(内部重定向)

.htaccess - 将所有内容静默重写/重定向到内部子文件夹

.htaccess 一致“请求超过了 10 个内部重定向的限制...”(包含代码)

本地主机上的 .htaccess 正常,网络服务器上出现 500 内部服务器错误