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
(默认)、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 中的错误还是我做错了什么?
【问题讨论】:
【参考方案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 - 将所有内容静默重写/重定向到内部子文件夹