由于某种原因,当我使用Restler的API Explorer(Swagger UI的一个分支)将我的API部署到生产时,它在我加载时给出了一般的404错误:
/api/explorer
当我更明确并陈述时:
/api/explorer/index.html
它加载页面的框架,但然后在标题下方的红色文本中报告“404:Not Found ../resources.json”:
我相当肯定有一些环境因为本地相同的文件工作而引起轰动。我还检查了/api/explorer
目录中的.htaccess文件,它看起来对我来说是正确的:
DirectoryIndex index.php
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^$ index.html [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.html [QSA,L]
</IfModule>
任何帮助都将不胜感激。
答案 0 :(得分:2)
事实证明,所有问题都归结为mod_rewrite问题。我仍然不是百分之百为什么这个问题出现在一个环境中,而不是其他具有完全相同的httpd.conf
和.htaccess
的问题。哦,解决方案是使用RewriteBase
指令在关于基本URL的重写规则中明确。
在API目录中,我现在有以下.htaccess
文件:
DirectoryIndex index.php
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /api
RewriteRule ^$ index.php [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>
在API-Explorer目录中,我现在有以下.htaccess
:
DirectoryIndex index.php
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /api/explorer
RewriteRule ^$ index.html [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.html [QSA,L]
</IfModule>
为了解决这个问题,我遇到的一个非常宝贵的提示是打开Apache的mod_rewrite日志记录。
# Adding logging for Rewrites
RewriteLog logs/rewrite.log
RewriteLogLevel 2
将此放在httpd.conf
的任何全局范围区域;我把它放在已经存在的关于日志记录的条目中,但如果你更喜欢它,你也可以把它放在最后。此外,有关重写故障排除的基础知识包括(如果这是基本的道歉):
AllowOverride All
和Options FollowSymLinks
。 httpd.conf
并完全避免.htaccess
个文件(并且这样也快一点)但如果您这样做,请记住httpd.conf
具有绝对网址引用与.htaccess
的亲戚关系。答案 1 :(得分:0)
您可以在Restler Github页面上查看自述文件 https://github.com/Luracast/Restler-API-Explorer#readme
答案 2 :(得分:0)
您是否添加了'Luracast \ Restler \ Resources'类以在API Root创建resources.json?
在您自己的index.php中,addAPIClass部分应如下所示:
$r = new Restler();
<强>
$r->addAPIClass('Luracast\\Restler\\Resources'); //this creates resources.json at API Root
强>
// ... your own addApiClass
$r->handle();
它位于“使用”下的文档中,但我也很难解决这个问题......
答案 3 :(得分:0)
确保您的api root中具有写入权限的缓存目录