この場合に、
http://example.com/2009/11/02/Sample-Post/
http://example.com/2009/11/02/SAMPLE-POST/
http://example.com/2009/11/02/samplE-poST/
などのURLでも同様に表示されるのですが、これは普通の動作なのでしょうか。
おそらく仕様ですね。ぴったり該当する URL がなくても、似たものがあればそれを表示する仕組みになっているためです。
そして、これが普通の動作の場合、全部小文字のURLでしかアクセスできなくしたり、他の場合のURLから転送したりということは可能でしょうか?
redirect_canonical フィルターを使って除外するとかの方法なら可能だと思われます。wp-includes/canonical.php を読んでみてください。
こんにちは、mildenさん
これは普通の動作なのでしょうか。
URLの大文字小文字を区別するしないは、wordPressの問題というより、OSに関係する問題だと思います。
windows上のサーバでは動作したとしても、区別するサーバもあるので、大文字と小文字は、区別すべきだと思います。
参考まで、UNIX上のhttpサーバって何で大文字小文字の区別があるんですか
nobitaさん:
windows上のサーバでは動作したとしても、区別するサーバもあるので、大文字と小文字は、区別すべきだと思います。
ご解答ありがとうございます。
しかし、レンタルサーバ(Linux)でそうなります。
なのでlilyfanさんのおっしゃるとおりなのだと思います。
おそらく仕様ですね。ぴったり該当する URL がなくても、似たものがあればそれを表示する仕組みになっているためです。
たとえばWordPress 日本語ローカルサイトで、
http://ja.wordpress.org/2009/11/18/wOrdprEss-wiNs-cms-awArd/
というURLでアクセスが可能です(これはちょっと・・・と思うのですが)。
mildenさん
しかし、レンタルサーバ(Linux)でそうなります。
最初に、ご提示いただいたURLの検証に失敗していました。軽率でした。
助言頂いたことで、とてもよい勉強になりました。
http://ja.wordpress.org/wOrdprEss-wiNs
でも、URLが書き替えが生じますが、リダイレクトしますね
クエリストリングだったらなんでもない事なんですが、誰かが、「キャッシュさせないテクニック」なんて言いながら、大文字小文字を切り替えてアクセスするリンクを張ったら無数のコピーを公開しているのと同じことになるかもしれない等と、想像を膨らませたり、考えさせられたりしました。
ありがとうございました。
おそらく仕様ですね。ぴったり該当する URL がなくても、似たものがあればそれを表示する仕組みになっているためです。
と言うより「MySQLでの該当カラムがBinary属性ではないので大文字/小文字を区別しないため」だと思われます。
(実際にデータベース内のpost_nameに対して検索をかけると大文字/小文字の区別なくマッチします。)
WordPressのソースコードを読む限り、とくに変わった処理をしてはいないようでした。
このようなプラグインを見つけましたがいかがですか?
permaLowercase301 – Plugin Directory
マッチしない場合はちゃんと301でリダイレクトしてくれるようです。
半角スペースどころか
http://ja.wordpress.org/2009/11/18/wordpress+wins%20cms-award<tag%20here>&hoge;/
(ファイル名部分は : /wordpress+wins cms-award<tag here>&hoge;/)
などでもOKですよ。
URLから得られたファイル名はデータベースで検索をかける前にサニタイズされていて
その段階で全角スペースや+は-に、タグ等は削除されています。