如果内容类型改变,php文件应该具有什么文件扩展名?

如果内容类型改变,php文件应该具有什么文件扩展名?,php,jquery,json,ajax,http-headers,Php,Jquery,Json,Ajax,Http Headers,我正在阅读来自的jQuery Typeahead文档,并查看表单,我正在从表单下面的选项卡研究源代码 很明显,在PHP选项卡中,我们可以看到alter(IOW-send)的所有“数据”内容,标题('Content-Type:application/json')和输出echo json_encode(数组(…)(“一切似乎都是PHP代码”) 现在,请转到Javascript选项卡并在浏览器中搜索字符串(在大多数浏览器中为CTRL+F):url:“/jquerytypeahead/user_v1.j

我正在阅读来自的jQuery Typeahead文档,并查看表单,我正在从表单下面的选项卡研究源代码

很明显,在PHP选项卡中,我们可以看到alter(IOW-send)的所有“数据”内容,
标题('Content-Type:application/json')和输出
echo json_encode(数组(…)(“一切似乎都是PHP代码”)

现在,请转到Javascript选项卡并在浏览器中搜索字符串(在大多数浏览器中为CTRL+F):
url:“/jquerytypeahead/user_v1.json”
。这个
url
属性是API中的jqueryajax选项(我想我们都知道它是什么)。问题是引用json文件的,为什么?我们之前看到的PHP文件不是返回json内容文件吗

我可以通过去看电影来证明这一点

www.runningcoder.org/jquerytypeahead/user_v1
.json
(注意json文件扩展名)

本地测试:我有一些代码返回
application/json
(与v1\u用户示例相同)
将其命名为
test.php
。访问此脚本时,我无法参考
localhost/typeahead/test.json?q=something
,但我可以参考
localhost/typeahead/test.php?q=something
。如何???

理解Apache服务器无法根据脚本返回的内容类型标题来确定URL,这一点很重要。换句话说,Apache无法提前知道脚本将返回JSON数据

也就是说,有几种方法可以让Apache实现您想要的功能。这里有两个我能想到的

方法#1 一种是告诉Apache服务器.json文件应该通过PHP解析器运行。这意味着您将实际将文件保存为test.json,当Apache提供它时,它将像执行任何扩展名为.php的文件一样执行它

我通常不喜欢这种解决方案,但在某些情况下,它是有意义的。要实现这一点,请将以下内容添加到httpd.config文件中

AddType application/x-httpd-php .json
方法#2 另一种方法是使用重定向服务test.php,就像它是test.json一样。(换句话说,当用户转到test.json时,实际上是执行test.php)我个人更喜欢这种方法。然而,这使得解决bug变得更加困难,因为您希望找到的文件实际上并不存在。对于大多数熟悉Apache的开发人员来说,这不是问题

要使重定向正常工作,可以在.htaccess文件中使用如下内容

RewriteEngine On
RewriteRule ^(.*)\.json$ $1.php [L]

完全同意你的观点,方法2是我想要的答案(我应该学习一些httpd语法)