2016-03-20 2 views
0

私はREST APIを設定しようとしています。たとえば、api/familyというURLがその情報を含むJSONオブジェクトを返します。しかし、スラッシュの後に何も付かないでapi/をすると、私はisset($_GET['url'])trueであると言われています。私は最初にそれがいくらかの空白だと思ったので、配列をトリミングしようとしましたが、それはどちらの場合もありませんでした。一般的にはPHPコードは次のとおりです。私は私が間違ってhtacessを設定することが可能というケースだとは思わないが、それは私が効果を持っているかもしれないと考えることができる唯一の他の事ですが

if (isset($_GET['url'])) { 
    echo "WRONG"; 
} 

$_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> 

issetが本当に出力している理由を知る助けがあれば幸いです。

+1

書き換えルールのおかげで常に*設定されています。値が*含まれているかどうかをチェックする必要があります。 –

+0

前述のように、空の($ _GET ['url'])チェックを実行することができます – segFault

+0

@JohnConde改善のための提案はありますか?私はなぜそれが起こっているのだろうと思う、urlはapi/api.phpになっている?url =言い換えればurlは "空の"値です。また、あまりにもずっと前に、私はlocalhost/api/api/api.phpにリダイレクトしていたので、改善の提案が大いに評価されるまで、メモをメモしておいてください。 – jimmyjacks

答えて

0

として

if ($_GET['url']=='') { 
    echo "WRONG"; 
} 

またはISSETとを確認するために、これを試してみてください、まだ、はあなたの書き換えルールのための空の値を許可していません。実際の値がない限り、それはあなたのAPI URLに書き換えられないようにします。

変更あなたはまだif(!empty($_GET['url']))を行うことができ、この

RewriteRule api/(.+)/?$ api/api.php?url=$1 [QSA,NC,L] 

RewriteRule api/(.*)$ api/api.php?url=$1 [QSA,NC,L] 

からのRewriteRuleパターンであなたの正規表現は、それがいないことを確認しますが、存在しない限り、Apacheは文句を言わないことをrerwriteので、それは決してあってはなりませんそこに価値がある。

1

コメントで述べたように、RewriteRule api/(.*)$ api/api.php?url=$1 [QSA,NC,L]ルールでは、基本的にはurlを空の値に設定しています。

urlの内容をif(empty($_GET['url'])またはempty($_GET['url'])などのように確認するとよいでしょう。 isset($_GET['url'])を使用すると、urlが設定されているため実際の定義が保持されないため、この場合はtrueが返されます。


@PanamaJackは、はるかに長い期間とより大きな範囲のソリューションとして作用するRewriteRule自体を変更するには優れたアドバイスを提供しています。

0

すぎ

良い
if (isset($_GET['url'])) { 
    if ($_GET['url']=='') { 
     echo "WRONG"; 
    } 
} 
関連する問題