5

我一直在寻找拒绝除 POST 之外的所有 HTTP 方法的方法。是的,我意识到这可能不会阻止太多,但我想让它发挥作用。我遇到了一种拒绝使用 .htaccess 文件发布以外的所有内容的方法:

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

现在在我的 iphone 应用程序中,我有以下代码将数据发布到网站:

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]

索引.php

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

} else {

}
于 2012-11-25T14:01:31.733 回答