我正在尝试设置一个REST API,当URL说出来时,例如,api/family
它会返回一个带有该信息的JSON对象。但是,当我在正斜杠之后没有任何内容api/
时,我被告知isset($_GET['url'])
是true
。我已经尝试修剪数组,因为我最初认为它是一些空白区域,但事实并非如此。通常,PHP代码是:
if (isset($_GET['url'])) {
echo "WRONG";
}
虽然我认为不是这样,我可能会错误地设置htacess
,但这是我能想到的另一件可能影响{{1}的事情。变量(即使它不应该)。
$_GET
任何有助于发现<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule api/(.*)$ api/api.php?url=$1 [QSA,NC,L]
</IfModule>
输出为真的原因都将受到赞赏。
答案 0 :(得分:1)
正如通过评论所述,您基本上是通过url
规则将RewriteRule api/(.*)$ api/api.php?url=$1 [QSA,NC,L]
设置为空值。
您可以尝试检查url
的内容,例如通过if(empty($_GET['url'])
或empty($_GET['url'])
。在这种情况下,使用isset($_GET['url'])
会返回true
,因为url
已设置,只是没有保留实际定义。
@PanamaJack在更改RewriteRule
本身时提供了很好的建议,这将成为一个更长期和更大范围的解决方案。
答案 1 :(得分:0)
请尝试检查
if ($_GET['url']=='') {
echo "WRONG";
}
或isset as
if (isset($_GET['url'])) {
if ($_GET['url']=='') {
echo "WRONG";
}
}
答案 2 :(得分:0)
更好的是,不允许重写规则为空值。这将使它不会重写到您的api URL,除非那里有实际值。
从
更改重写模式中的正则表达式RewriteRule api/(.*)$ api/api.php?url=$1 [QSA,NC,L]
到此
RewriteRule api/(.+)/?$ api/api.php?url=$1 [QSA,NC,L]
你仍然可以if(!empty($_GET['url']))
确保它不是,但它绝不应该是因为apache不会重写它,除非那里有值。