【问题标题】:htaccess permanent redirect throws Internal Server Errorhtaccess 永久重定向引发内部服务器错误
【发布时间】: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 中的错误还是我做错了什么?

【问题讨论】:

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


    【解决方案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 状态代码。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-30
        • 1970-01-01
        • 1970-01-01
        • 2014-09-24
        • 2013-07-17
        • 2012-11-20
        相关资源
        最近更新 更多