0

我想将 .xhtml 文件作为

  • application/xhtml+xml如果浏览器说它接受它。
  • text/html除此以外

然后,我有这个代码:

AddType text/html .xhtml
<Files "*.xhtml">
    RewriteEngine on
    RewriteCond "%{HTTP:Accept}" "application/xhtml\+xml\s*(?:,|$)"
    RewriteRule .* - [T=application/xhtml\+xml]
</Files>

它有效。但我认为可以简化否定条件。就像是

<Files "*.xhtml">
    RewriteEngine on
    RewriteCond "%{HTTP:Accept}" !"application/xhtml\+xml\s*(?:,|$)"
    RewriteRule .* - [T=text/html]
</Files>

但它不起作用:我总是得到一个text/html页面,即使支持 XHTML。

4

1 回答 1

2

我想第二个选项应该是这样的:

<Files "*.xhtml">
    RewriteEngine on
    RewriteCond %{HTTP:Accept} !application/xhtml\+xml 
    RewriteRule .* - [T=text/html]
</Files>

这样,如果HTTP:Accept变量不包含 application/xhtml+xmlMIME 类型设置为的字符串text/html

回复 OP 评论:

问题中的正则表达式: application/xhtml\+xml\s*(?:,|$)

  • application/xhtml=从字面上匹配字符application/xhtml 。

  • \+ = 匹配字符+字面意思。

  • xml=从字面上匹配字符xml 。

  • \s*= 匹配 之后的空白字符(空格、制表符、换行符等)application/xhtml+xml,介于零次和无限次之间,尽可能多次,根据需要返回(贪婪)。

  • ?: = 问号 ( ? ) 和冒号 ( :)表示该组(在圆括号内)不是反向引用。

  • ,|$,=从字面上匹配字符断言字符串末尾的位置。

此答案中的正则表达式:

仅包括相关的字符串段:application/xhtml+xml以确保存在匹配,因此当此字符串存在时不应用规则。

于 2013-02-17T03:16:02.463 回答