5

POST以外のすべてのHTTPメソッドを拒否する方法を探していました。はい、私はこれがあまり妨げないかもしれないことを理解していますが、私はそれを機能させたいと思います。.htaccessファイルを使用して投稿する以外のすべてを拒否する方法に出くわしました。

RewriteEngine On
RewriteCond %{REQUEST_METHOD} !^POST
RewriteRule ^.*$ /home/user/public_html/folder/bad_request.php

今私のiPhoneアプリには、ウェブサイトにデータをPOSTする次のコードがあります。

NSString *post_length = [NSString stringWithFormat:@"%d",[post_data length]];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://folder.domain.com/"]];
[request setHTTPMethod:@"POST"];
[request setValue:post_length forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:post_data];

上記のように現在の.htaccessでこのコードを実行すると、データを投稿していないかのようにbad_requestページが表示されますが、.htaccessルールを!^ GETに変更すると、ブラウザでアクセスしてアクセスできますが、投稿するとiPhoneのコードで私は拒否されます...それは逆に機能します。なぜそれが機能しないのか誰かが知っていますか?

4

2 に答える 2

0

(コメント - 回答ではありませんが、コードを追加する必要があります)

POST メッセージが iPhone から送信されていると仮定すると (.htaccess のフィルターを削除することで確認できます)、取得しているリクエストの種類を確認する必要があります。

これをする:

1) 次のコードで PHP ファイル "t.php" を作成します。

<?php

echo 'htaccess sees: **' . htmlentities($_GET['m']) . '**<br>';
echo 'apache sees: **' . htmlentities($_SERVER['REQUEST_METHOD']) . '**';

?>

2) 以下を使用して .htaccess を作成します。

# Enable rewrite engine and route requests to framework
# Add Options SymLinks if you need it
RewriteEngine On
RewriteRule ^(.*) t.php?m=%{REQUEST_METHOD} [L,QSA]

次に、実行して結果をメモします。サーバーへのすべてのリクエストは t.php に送られ、何が .htaccess によって処理され、何がサーバー メソッドとして PHP に渡されているかが表示されます。アスタリスクは、スペースがないようにするためのものです。これらが両方とも「POST」であることを再確認してください。iPhone デバッガーで出力をトラップするか、PHP でログ ファイルに出力する必要があります。

于 2012-11-23T04:40:48.640 に答える
0

成功しなかったので、最終的に提案された.htaccessコードの一部をいくつかの.phpと一緒に組み込むことにしました。私は.htaccessファイルにリクエストメソッドを取得させ、それをindex.phpに送信します.index.phpファイルは、== 'POST'が何か他のことをするかどうかを言い、それは機能します.

.htaccess

RewriteEngine On
RewriteRule ^(.*) index.php?request=%{REQUEST_METHOD} [L,QSA]

index.php

if ($_GET['request'] == 'POST') {

} else {

}
于 2012-11-25T14:01:31.733 に答える