【问题标题】:How to mod_rewrite based on http-header content-type如何根据 http-header 内容类型进行 mod_rewrite
【发布时间】:2013-04-30 02:48:22
【问题描述】:

是否可以根据 HTTP-Header content-type 重定向用户?

例如:

1)

一个应用程序正在尝试加载localhost/res/123/var/abc,而content-type 设置为:

application/json

服务器应该只将 JSON-Result 返回给应用程序(已实现)。

2)

如果普通的网络浏览器正在访问 url localhost/res/123/var/abc,则 content-type 设置为:

text/html

在这种情况下,服务器应重定向浏览器以输出 web 视图(例如 index_web.html)。

我可以不使用 PHP 来实现这样的事情吗?

【问题讨论】:

    标签: json apache .htaccess mod-rewrite content-type


    【解决方案1】:

    据我所知,内容类型不是在请求时设置的。因此,您需要检查浏览器是否正在发送Accept 标头,该标头向服务器描述了它将接受(并显示)哪些类型的数据而不下载它。大多数浏览器都这样做。他们将以下标头字符串发送到服务器(这是从 Chrome 获得的):

    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    

    因此,您需要使用以下条件检查 Accept 标头:

    RewriteCond %{HTTP:Accept} text/html [NC]
    # Then, add your RewriteRules here ...
    

    这将检查text/html 是否包含在Accept 标头中。

    【讨论】:

    • 这样的问题是Accept 标头通常(并且非常正确)将包含两种所需的内容类型,但具有不同的q 权重。您的测试不检查测试的相对权重,也不处理通配符。你也许可以用mod_negotiation 做你想做的事,虽然它不是很强大。否则,您将不得不自己在脚本中执行此操作。
    猜你喜欢
    • 2010-09-09
    • 2013-07-12
    • 1970-01-01
    • 1970-01-01
    • 2020-01-01
    • 2017-01-24
    • 1970-01-01
    • 1970-01-01
    • 2022-08-04
    相关资源
    最近更新 更多