如何基于http-header content-type的mod_rewrite

gie*_*s0r 3 apache .htaccess mod-rewrite json content-type

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

例如:

1)

应用程序正在尝试加载,localhost/res/123/var/abccontent-type设置为:

application/json
Run Code Online (Sandbox Code Playgroud)

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

2)

如果正常的Web浏览器正在访问该URL localhost/res/123/var/abc,则将content-type其设置为:

text/html
Run Code Online (Sandbox Code Playgroud)

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

我可以在不使用PHP的情况下实现这样的事情吗

Mik*_*étt 8

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

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Run Code Online (Sandbox Code Playgroud)

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

RewriteCond %{HTTP:Accept} text/html [NC]
# Then, add your RewriteRules here ...
Run Code Online (Sandbox Code Playgroud)

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

  • 这个问题是,通常(并且非常正确地)`Accept`标题将包含所需的内容类型,但具有不同的`q`权重.您的测试不会检查测试的相对权重,也不会处理通配符.你可以用`mod_negotiation`做你想做的事,虽然它不是很强大.否则你不得不在脚本中自己做. (2认同)