【问题标题】:What file extension a php file should have if Content-Type is altered?如果 Content-Type 被更改,php 文件应该具有什么文件扩展名?
【发布时间】:2017-07-22 18:48:19
【问题描述】:

我正在阅读来自 www.runningcoder.org 的 jQuery Typeahead 文档,并查看了 v1_user example 我正在研究表单下方选项卡中的源代码。

很明显,在 PHP 选项卡中我们可以看到所有的“数据”内容,然后更改(IOW 发送)header('Content-Type: application/json'); 并输出 echo json_encode(array(...));(“一切似乎都是 PHP代码”)。

现在,请转到 Javascript 选项卡 并在浏览器中搜索字符串 (CTRL+F在大多数浏览器中):url: "/jquerytypeahead/user_v1.json"url 属性是 API 中的一个 jQuery Ajax 选项(我想我们都知道它是什么)。事情是指的是一个json文件,为什么?我们之前看到的那个PHP文件返回不就是一个json内容文件吗?

我可以去http://www.runningcoder.org/jquerytypeahead/user_v1.json?q=ar证明这一点

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

本地测试:我有一些代码返回 application/json(与 v1_user 示例相同) 将其命名为test.php。访问此脚本时,我不能参考localhost/typeahead/test.json?q=something,但我可以参考localhost/typeahead/test.php?q=something。怎么样??

【问题讨论】:

    标签: php jquery json ajax http-headers


    【解决方案1】:

    了解 Apache 服务器无法根据脚本为 Content-type 标题返回的内容来确定 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)我个人更喜欢这种方法。但是,由于您期望找到的文件实际上并不存在,因此它使解决错误变得更加困难。对于大多数熟悉 Apache 的开发人员来说,这不是问题。

    要使重定向工作,您可以在 .htaccess 文件中使用类似下面的内容。

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

    【讨论】:

    • 完全同意你的观点,方法 #2 是我正在寻找的答案(我应该学习一些 httpd 语法)。upvoted
    猜你喜欢
    • 2015-10-07
    • 1970-01-01
    • 2019-05-01
    • 2015-06-22
    • 2017-03-12
    • 2015-09-21
    • 1970-01-01
    • 1970-01-01
    • 2011-10-10
    相关资源
    最近更新 更多