我想将.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>
但它不起作用:即使支持XHTML,我总是会收到text/html
页面。
答案 0 :(得分:2)
我猜第二个选项应该是这样的:
<Files "*.xhtml">
RewriteEngine on
RewriteCond %{HTTP:Accept} !application/xhtml\+xml
RewriteRule .* - [T=text/html]
</Files>
这样,如果HTTP:Accept
变量不包含字符串application/xhtml+xml
,则MIME类型设置为text/html
。
问题中的正则表达式: application/xhtml\+xml\s*(?:,|$)
application/xhtml
=按字面意思匹配字符 application / xhtml 。
\+
=从字面上匹配字符 + 。
xml
=按字面意思匹配字符 xml 。
\s*
=在application/xhtml+xml
之后,在零和无限次之间匹配空格字符(空格,制表符,换行符等),多次尽可能根据需要回馈(贪婪)。
?:
=问号(?)和冒号(:)表示此组(圆括号内)不是返回参考。
,|$
=在字符串末尾匹配字符,
字面 OR 断言位置。
此答案中的正则表达式:
仅包含相关的字符串细分: application / xhtml + xml 以确保匹配,因此当此字符串存在时,不会应用该规则。