ラベル .htaccess の投稿を表示しています。 すべての投稿を表示
ラベル .htaccess の投稿を表示しています。 すべての投稿を表示

2009年12月10日木曜日

.htaccessでContent-typeとしてapplication/xhtml+xmlを振り分ける方法とか。

まず、第一に気にすべきはapplication/xhtml+xmlとtext/htmlをブラウザのUAで判断するべからずだと思います。

何故ならばブラウザを全て把握する必要があり、また、新たなブラウザが発生した場合に対処するのが面倒だからです。これはJavaScriptで対応していないメソッドがあってもUAで判断してしまった為に対応後に面倒な修正が入るのと同様の理由です。

というわけでうち[juner.net]ではUAを見ないで行う判別方法を.htaccessで分岐させていますが、それは以下の様な物になります。

AddType "text/html;charset=utf-8" .html
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_ACCEPT} application/xhtml\+xml
RewriteCond %{LA-F:REQUEST_FILENAME} \.html
RewriteRule .* - "[T=application/xhtml+xml]"
</IfModule>

これで、ブラウザが対応していなければtext/htmlを、対応しているならばapplication/xhtml+xmlを返すという事が可能となります。

まぁmod_rewrite.cが用意されていれば……の話ではありますけれどね。

尚、うちの場合、htmlは対応状況によって振り分けますが、.htmはtext/htmlを、.xhtmlはapplication/xhtml+xmlを返す様な設定にしてあります。

2009年4月28日火曜日

[js][.htaccess]今回得た事のメモとか云々。

というわけで今回得た事としては

  • RewriteRuleは複雑な方から。
  • phpファイルは静的URLに巻き込まれない場所に置く。

でしょうか。

今回の例を挙げるならば、

http://example.com/iddy/iddy_tool.php

の様に設置して、.htaccessを

RewriteRule ([A-Za-z0-9]+)$ iddy_tool.php?id=$1 [L]
RewriteRule ([A-Za-z0-9]+)/([-_A-Za-z0-9]*)$ iddy_tool.php?id=$1&elem=$2 [L]

の様にすると、RewriteRuleの一つめにしか引っかからず、その上、iddy_tool.phpも呼び出せない状態になります。

その為、

http://example.com/iddy_tool.php

の様に設置して、.htaccessを

RewriteRule ([A-Za-z0-9]+)/([-_A-Za-z0-9]*)$ ../iddy_tool.php?id=$1&elem=$2 [L]
RewriteRule ([A-Za-z0-9]+)$ ../iddy_tool.php?id=$1 [L]

の様にすることで先程の失敗を両方共に引っかからなくなります。

そんな感じ。