0

在配置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 服务器错误。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
4

2 回答 2

1

  1. 看起来该错误与您拥有的规则没有任何关系:

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

这表示 QSA 标志是 a 的未知标志RewriteCond,后跟 a favicon.iconot found 所以我猜它与对您的 REST 目录的请求无关。

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

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

于 2012-10-10T15:50:38.047 回答
0

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

Restler 总是返回未找到

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

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

于 2012-10-10T10:40:20.313 回答