「?id=xxx」を「xxx」にする方法
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」で作って不利だったとも思えないので、ページ内容によるのかもしれない。
「パパも」などはその形だが、ちゃんとクロールされている。