「?id=xxx」を「xxx」にする方法

Posted by Koumei on 7月 22, 2010 in webプログラミング, サーバ等設定 |

 ApacheのRewriteを使って、次のようなことがしたい。

 「http://cum.2box.jp/?id=xxx」あるいは、
 「http://cum.2box.jp/index.php?id=xxx」というのではなく、
 「http://cum.2box.jp/xxx」としたい。

 拡張子がないので、フォルダに見える。
 拡張子をダミーで付けても良いが、そこまではしないでいいだろう。

 簡単なのは、プログラムを何も直さなくても動く方法である。
 まあ、実際はクローラーやrssのために、その形にリンクを直す作業は出るのだが、受け側は変える必要がない。

 何かと言うと、最初に書いてある。
 入ってきたリクエストを書き換え、理解できる形に変えてからプログラムを呼び出そうというのだ。

 記述はこれ。

Options FollowSymLinks
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([0-9]+)$ index.php?id=$1 [L]

 
 実はハマった。
 サブフォルダの中なのだが、サーバ設定で直接そのフォルダにリダイレクトされる。
 その書き方で試行錯誤してしまった。
 何が悪かったかというと、URLから見るとルートになるので、頭に「/」を付けていてうまく動かなかったのである。
 何も付けないとちゃんと動いた。

 ちょっとだけ解説すると、「RewriteEngine On」で書き換えを有効にする。
 次の2行は、ファイルになくフォルダにもないとき、という意味で、ない場合にのみ書き換えるようにしている。
 最後が実際の書き換えで、数字のみだった場合に、「?id=」に変換してから、実際に動作させるのである。

 ページ内部のリンク、およびrss.xmlとsitemap.xmlも、その形に直した。
 すっきりしたリンクになり、SEO対策的にも良いとされている。
 ただし、今まで「?id=xxx」で作って不利だったとも思えないので、ページ内容によるのかもしれない。
 「パパも」などはその形だが、ちゃんとクロールされている。

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

Copyright © 2009-2010 Koumei Soft 開発ログ All rights reserved.
Desk Mess Mirrored v1.6 theme from BuyNowShop.com.