指定Accept:标头时,Apache 406不可接受

Dan*_*sch 6 php apache

我试图找到一个解决方案,但其他406问题的解决方案对我没有帮助.

我在Mac上启用了PHP和Apache Web服务器.我发现如果我使用Accept:标头集传递请求(POST或GET),那么它会因406错误而失败:

$ curl -X GET -H "Accept: application/json" http://localhost/test/tester
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>406 Not Acceptable</title>
</head><body>
<h1>Not Acceptable</h1>
<p>An appropriate representation of the requested resource /test/tester could not be found on this server.</p>
Available variants:
<ul>
<li><a href="tester.php">tester.php</a> , type application/x-httpd-php</li>
</ul>
</body></html>
Run Code Online (Sandbox Code Playgroud)

但是,如果我排除"Accept:application/json",请求将执行而不会出错.

我尝试添加此test/tester.var(与test/tester.php在同一个目录中):

URI: tester

Content-type: application/json
URI: tester.php
Run Code Online (Sandbox Code Playgroud)

我的目的是通过执行tester.php指示Apache使用"Accept:application/json"来处理请求.但它没有帮助我(我还在我的httpd.conf文件中的'IfModule mime_module'下添加了'AddHandler type-map .var'并重新启动了服务器).

"mod_security"似乎没有配置,但我将以下.htaccess添加到我的test /目录中:

<IfModule mod_security.c>
SecFilterEngine Off
SecFilterScanPOST Off
</IfModule>
Run Code Online (Sandbox Code Playgroud)

这些是我在网上找到的解决方案,没有一个对我有用.

有任何想法吗?

Dan*_*sch 3

我终于找到解决方法了!正如我怀疑的那样,*mod_security* 与我的问题无关。

以下是我对/etc/apache2/httpd.conf所做的更改:

  1. 通过取消注释“IfModule mime_module”部分中的“AddHandler type-map var”行来启用类型映射。
  2. 将以下两行添加到“IfModule mime_module”部分:

    AddType application/x-httpd-php .php
    MultiviewsMatch Handlers Filters
    
    Run Code Online (Sandbox Code Playgroud)

在我的 PHP 源目录中,我在与tester.php相同的目录中创建了一个tester.var,其内容为:

    Content-type: application/json
    URI: tester.php
Run Code Online (Sandbox Code Playgroud)

现在一切都好了。