首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Apache Mod重写Rest Api

Apache Mod重写Rest Api
EN

Stack Overflow用户
提问于 2022-09-29 15:53:13
回答 1查看 53关注 0票数 1

我正在使用php中的rest。在开发中,我总是使用php -S 127.0.0.1:9000托管本地php。现在,我需要托管我在安装了Apache的vps中构建的rest。我该怎么做?让我解释一下我想要实现的url模式。假设我的域是beautifulrest.com。我需要将这个api托管到medifulrest.com/api/。问题就出现在这里。我构建了我的api,以便当用户转到美观REST.com/api / user /create时,没有/user/create文件夹,但是url由php动态处理,代码如下:$uri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH); $uri = explode('/', $uri);。在Apache中,如果我转到美妙的REST.com/api /user/create,它会尝试查找/user/create文件夹,但是没有这样的文件夹。如果我想实现与开发中相同的效果,我需要请求美观的REST.com/api/index.php/user/create,现在将url解析到php侧。我要问的是:是否有一种方法可以使用apache的Mod_rewrite重写url,这样就可以重新编写_~_

这在nginx中也有可能吗?

耽误您时间,实在对不起!

EN

回答 1

Stack Overflow用户

发布于 2022-09-29 16:24:57

使用FallbackResource (mod_dir)

您可以在.htaccess子目录中创建一个/api文件,并使用mod_dir的FallbackResource。(如果您只需要一个标准的前端控制器模式,则不需要特别使用mod_rewrite。)例如:

代码语言:javascript
运行
复制
FallbackResource /api/index.php

现在,任何通常会触发404 Not的/api/<anything>请求都会被路由到/api/index.php

并使用现有的PHP代码来解析$_SERVER['REQUEST_URI']

通过将.htaccess文件放置在/api子目录中,而不是根目录中,它将自然地只应用于对/api/<anything>的请求,而不是字面上的/<anything>

参考资料:

替代使用mod_rewrite (RewriteRuleRewriteCond)

要使用mod_rewrite实现相同的功能,您可以执行如下操作。同样,在/api/.htaccess文件中:

代码语言:javascript
运行
复制
# /api/.htaccess

DirectoryIndex index.php

RewriteEngine On

RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]

第一个RewriteRule只是一个简单的优化,防止了进一步不必要的处理(即。文件系统检查)何时前控制器(即。( index.php)已被重写为(按照下面的规则)。

第一和第二条件(RewriteCond指令)检查请求是否已经分别映射到文件或目录。

RewriteRule模式( RewriteRule指令的第一个参数)只是一个点(即。( .)所以要匹配某物.非根请求。对根目录的请求由mod_dir的DirectoryIndex (上面定义)处理。

注意,替换字符串( RewriteRule指令的第二个参数),即。简单地说,index.php使用一个相对的文件路径。这是相对于包含.htaccess文件的目录,即。/api在这种情况下。因此,结果是对/api/index.php的重写。这里不需要硬编码父目录。

但是,如果这是您所要做的全部工作,那么这与刚才只使用FallbackResource的解决方案没有任何好处,只是/api子目录不需要在规则中显式声明。

重写url,以便将example.com/api/index.php/user/create重写为example.com/api/user/create

它是朝另一个方向重写的。即。从/api/user/create/api/index.php/user/create。但是,如果您的现有代码已经配置为使用PATH_INFO,那么这里似乎不需要使用REQUEST_URI

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73898413

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档