RewriteCond:未知旗帜'QSA'

时间:2012-10-10 10:12:19

标签: apache mod-rewrite restler

配置Restler时,建议创建以下重写规则:

DirectoryIndex index.php
<IfModule mod_rewrite.c>
   RewriteEngine On
   RewriteRule ^$ index.php [QSA,L]
   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>

我已将它放入我的REST目录的根目录中的.htaccess文件中,但是当触发此规则时,我收到500 Server错误。 apache错误日志的错误消息是:

[Wed Oct 10 10:39:30 2012] [alert] [client 127.0.0.1] /public/api/.htaccess: RewriteCond: unknown flag 'QSA'
[Wed Oct 10 10:39:30 2012] [error] [client 127.0.0.1] File does not exist: /public/favicon.ico

我认为缺少favicon.ico文件可以忽略,但我担心“未知标志'QSA'”错误。我对重写规则知之甚少,所以任何帮助都会受到赞赏。

对于那些熟悉Restler的人,我使用3.0.0rc2(如果重要的话)。另外值得指出的是,使用对index.php的显式调用非常有效,因为我得到了404 JSON错误响应(一个积极的改进),但如上所示,如果我依赖重写规则,那么我只得到500服务器错误:

http://localhost/api/index.php/say/hi    - WORKS (gives JSON 404 error)
http://locahost/api/say/hi               - 500 SERVER ERROR

2 个答案:

答案 0 :(得分:1)

  1. 看起来错误与您所拥有的规则无关:

      

    /public/api/.htaccess:RewriteCond:未知标志'QSA'

  2.      这表示QSA标志是RewriteCond的未知标志,后跟favicon.ico未找到,因此我猜测它与您的REST目录中的请求无关。

    1. 如果你有AllowOverride None,那么你的htaccess文件就会被彻底忽略。可以在htaccess文件中覆盖配置选项的不同方面,None意味着,htaccess不能覆盖任何配置,因此它将被忽略。

    2. 这里根本不需要QSA标志。只有在重写查询字符串并且想要将原始查询字符串附加到末尾时才需要它。默认情况下,无论如何都会附加查询字符串。

答案 1 :(得分:0)

有趣......我正在查看我的JSON 404消息并找到了这篇文章:

Restler always returns not found

它不仅解决了我的404错误,还帮助修复了500 Server错误。我唯一需要做的就是将http.conf的AllowOverride更改为All。

如果有人能告诉我为什么会发生这种情况,我仍然会感兴趣,但现在这样做了。