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/htmlXHTML がサポートされていても、常にページが表示されます。

4

1 に答える 1

2

2番目のオプションは次のようにする必要があると思います:

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

そのようにして、HTTP:Accept変数に文字列が含まれていない 場合application/xhtml+xml、MIME タイプは に設定されtext/htmlます。

OPコメントへの回答:

質問の正規表現: application/xhtml\+xml\s*(?:,|$)

  • application/xhtml= 文字application/xhtmlを文字どおりに一致させます。

  • \+ = 文字に一致+文字通り。

  • xml= 文字xmlを文字どおり一致させます。

  • \s*= の後に空白文字(スペース、タブ、改行など) をapplication/xhtml+xml0 回から無制限に、できるだけ多く一致させ、必要に応じて返します (貪欲)。

  • ?: = 疑問符 ( ? ) とコロン ( : ) は、このグループ (丸括弧内) が後方参照ではないことを示します。

  • ,|$,= 文字を文字どおり一致させるか、文字列の末尾の位置をアサートします

この回答の正規表現:

関連する文字列セグメントのみが含まれます: application/xhtml+xmlが一致することを確認するため、この文字列が存在する場合、ルールは適用されません。

于 2013-02-17T03:16:02.463 に答える