肉とビールとパンケーキ by @sotarok

少し大人になった「肉とご飯と甘いもの」

mod_rewriteでディレクトリに模倣する

まあなんのこっちゃですが。


mod_rewriteで動的URLを書き換えて静的化している場合、例えば、

http://www.example.com/news.php?newsid=5

http://www.example.com/news/5

でアクセスできるようにしちゃったりしますよね。このときって、.htaccessには、

RewriteEngine On
RewriteRule ^news/([0-9]+)/{0,1}$ news.php?newsid=$1 [L]

みたいなカンジにすると思うのですが・・・・しなかったらゴメンなさい。笑。末尾にスラッシュがあってもなくてもアクセスできるように(末尾にスラッシュ入れるクセのある人とか、いれない人とかのため・・・)しているのですが。。


最近思ったのですが、上記の方法だと、

http://www.example.com/news/5

でも

http://www.example.com/news/5/

でもアクセスできるのはいいけど、これって、検索エンジン的には別々のページだと判断されてるかも?とか思いました。*1

結局何がいいたいかと言うと、本来は、末尾にはスラッシュがあるべきじゃないですか?あ、もちろんディレクトリに模倣するなら。ね。例えば、通常ウェブサーバに

http://www.example.com/news

でアクセスすると、HTTPレスポンスコード301を返したうえで、

http://www.example.com/news/

にリクエストを送るよう指示されます。実はこれをmod_rewriteで表現したくて、最近は以下のようにしてます。

RewriteEngine On
RewriteRule ^news/([0-9]+)$ news/$1/ [R=301]
RewriteRule ^news/([0-9]+)/$ news.php?newsid=$1 [L]

これで、通常通り、末尾にスラッシュがない状態でアクセスした様子を模倣できるかなーとか。

ただ、余計なリクエストを生む原因を作っていそうとか。まあでも基本的にサイト内リンクでは末尾にスラッシュ入れるように統一するとか。色々考えちゃったりしてます。


もっとなんかスマートな方法があったら教えてください(笑)

*1:されてるのかな?されてないのかな?調べてませんごめんなしあ