我在我的文件夹 API 中安装了这个 .htaccess 文件。它用于将所有请求重定向到 api.php 脚本。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-s
RewriteRule ^(.*)$ api.php?rquest=$1 [QSA,NC,L]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.*)$ api.php [QSA,NC,L]
RewriteCond %{REQUEST_FILENAME} -s
RewriteRule ^(.*)$ api.php [QSA,NC,L]
</IfModule>
现在,我为我的 API 添加了一些 Swagger 文档,并且需要能够使用以下 URL 访问它localhost/API/Swagger/ui
:当我尝试访问该 URL 时,我不断收到 404。
目前使用 WAMP 进行设置,但在我测试完所有内容后将立即部署到生产服务器。我可以很好地访问这样的 API 函数:localhost/API/GetMakes?year=2010
关于做什么的任何想法?
防止 URL 路由到您的 API 的一种方法(我假设这是触发 404 而不是 Swagger 文档的“错误”?)是简单地在文件中包含一个异常
/API/.htaccess
以防止此特定 URL 被馈送到你的api.php
文件。例如:
因此,如果请求的 URL以 then开头,
/API/Swagger/ui
则处理停止并且不会继续通过剩余的 mod_rewrite 指令。但是,根据您的“Swagger”URL 的路由方式以及
Swagger
(andui
) 是否是物理子目录,可能会有更好的方法来执行此操作。更新:由于从注释中出现,这
/API/Swagger/ui
是一个物理目录,那么编辑文件的上述替代方法是简单地在or子目录中/API/.htaccess
创建一个附加.htaccess
文件并启用重写引擎。例如:/Swagger
/Swagger/ui
mod_rewrite 默认情况下不被继承,因此这应该具有完全覆盖与您的 API 关联的父指令的效果。这避免了您必须编辑 API
.htaccess
文件。旁白:您当前的指令看起来确实有点奇怪。您首先将所有未映射到物理目录或文件(大小)的请求路由到您的 API 脚本。但是,您继续将所有请求路由到您的 API 脚本吗?
这只会进一步支持我上面的评论。您文件中的第二条和第三条规则
.htaccess
不包含rquest
URL 参数 - 所以这些似乎只会导致 404?这些指令还会阻止您的“Swagger”URL 工作。浏览了您链接到的教程后,您的
.htaccess
文件中的第二条和第三条规则似乎应该被简单地删除,因为它们似乎没有任何实际用途(除了触发 404)?这也将解决您访问“Swagger”文档的初始问题,并且避免包含任何“例外”或其他指令。换句话说,将您的/API/.htaccess
文件减少到以下内容也应该“有效”:但是,如我的答案顶部所述,保持“异常”仍然是最佳的,因为它可以防止在访问“swagger”文档时进行不必要的文件系统检查。