dポイントプレゼントキャンペーン実施中!

いつもお世話になっております。

mod_rewriteを使って、動的ページを静的ページのように表示したいと
考えております。
ですが、正規表現が間違っているようで、うまくリダイレクトされません。

test.php?aid=00000001
にアクセスされた場合
test/aid/00000001
と表示したいと考えております。

下記のように(他にもいろいろ試しましたが)やったのですが・・・
RewriteRule test.php?([0-9A-Za-z]+)$=([0-9]+)$ /test/$1/$2 [L]

ご教授よろしくお願いいたします。

<環境>
PHP:4.3.2
Apache:2.0.40 (Red Hat Linux)

A 回答 (6件)

以下を試してみてください。


◎ドキュメントルート(/home/test01/www)の下に、hogeディレクトリを作る。
◎hogeディレクトリ内に、test.phpを置く
<?php var_dump($_GET); ?>
◎hogeディレクトリ内に、.htaccessを置く
RewriteEngine on
RewriteRule ^test/([0-9A-Za-z]+)/([0-9]+)$ /hoge/test.php?$1=$2 [L]
◎以下のURLにブラウザからアクセス
http://your.domain.name/hoge/test/ABCDEF/2345
(your.domain.nameは適宜書き換えてください)

以下が表示されるはずです。
array(1) {
["ABCDEF"]=>
string(4) "2345"
}

うまくいかなかったら、mod_rewriteのインストール・設定がまずいのかもしれませんね。。。

この回答への補足

fdsjaklfjas さん サンプルのご提示ありがとうございます。
ご指示いただいたようにやってみたのですが、表示されません。
以前テストで、下記のように表記し
RewriteRule index\.html /test.php?sid=00000001
index.htmlにアクセスすると、test.php?sid=00000001
の内容が表示されていたので、インストールはできていると
思っていました。
httpd.conf にも LoadModule rewrite_module modules/mod_rewrite.soが
あることを確認しております。

補足日時:2006/11/01 16:30
    • good
    • 0

>画像のパスも mod_rewrite で書き換えるというのが一番スマートのような気がします。


>ですが、ページ数もかなりありますのでそのページごとに
>変換ルールを書く予定でおります。
>変換ルールは10個程度が限界だとどこかのページで見た気が・・・。

少なくとも、画像ファイル1つにつきRewriteRuleを1つ書く必要はないと思います(1つのRewriteRuleで多数の画像のURLの変換ができるはず)。
このへんの変換ルールの書き方がよく判らないようでしたら、以下をおすすめします。
・変換ルール(RewriteRule)を変える。
 test/aid/00000001 ではなく、
 test_aid_00000001 に書き換えるルールにする。

>あと、一度 test/aid/00000001 にアクセスし、アクセスしたページから
>再度 test/aid/00000001 にアクセスをすると
>test/aid/00000001/aid/00000001
>とパラメータがどんどん増えていってしまうのですが

まずは、test/aid/00000001の、リンクを張っている箇所のHTMLソースをみて、おかしなURLで無いか確認して下さい。
もしリンクのURLをPHPで動的に生成しているならば、PHPのプログラムの内容を合せて確認して下さい。
    • good
    • 0
この回答へのお礼

fdsjaklfjas さんご回答ありがとうございます。

・変換ルール(RewriteRule)を変える。
 test/aid/00000001 ではなく、
 test_aid_00000001 に書き換えるルールにする。
で操作するようにいたしました。
そのようにしたら、パラメータが増えるという現象もなくなりました。
ご丁寧にいろいろありがとうございました。

お礼日時:2006/11/02 14:55

とりあえずうまくいってよかったです。


>画像等は相対パスで設定されているため、表示されなくなりました。
>これを表示するには、絶対パスで設定するしかないのでしょうか?

対策は、以下のようなものがあります。

・HTML中のimg srcパスを手で書き換える。
  - 画像の相対パスの頭に、../../をつける。
  - 画像のパスを絶対パスにする。

・変換ルール(RewriteRule)を変える。
 test/aid/00000001 ではなく、
 test_aid_00000001に書き換えるルールにする。

・画像のパスも、mod_rewriteで書き換える。
 新しいRewriteRuleを追加する。

この回答への補足

fdsjaklfjas さんご回答ありがとうございます。
対策としてはいろいろあるようですね。
画像のパスも mod_rewrite で書き換えるというのが一番スマートのような気がします。
ですが、ページ数もかなりありますのでそのページごとに
変換ルールを書く予定でおります。
変換ルールは10個程度が限界だとどこかのページで見た気が・・・。

あと、一度 test/aid/00000001 にアクセスし、アクセスしたページから
再度 test/aid/00000001 にアクセスをすると
test/aid/00000001/aid/00000001
とパラメータがどんどん増えていってしまうのですが
これはなぜでしょうか?

補足日時:2006/11/02 12:28
    • good
    • 0

うまくいかないようですね。

すみません。
エラーログには、どのように出力されているのでしょうか。
また、以下のようにしても、やっぱりだめですか?
RewriteEngine on
RewriteRule test/([0-9A-Za-z]+)/([0-9]+) /hoge/test.php?$1=$2 [L]
これで解決しなかったら、すみませんが私には解決出来そうもありません。。。
    • good
    • 0
この回答へのお礼

fdsjaklfjas さん いろいろありがとうございます。
ご提示いただいたものでも、以前試しておりました。
.htaccess にはBasic 認証や php.ini の設定を記述しておりましたの
それは httpd.conf に書き、RewriteRule だけにしたら動きました。
ありがとうございます。

画像等は相対パスで設定されているため、表示されなくなりました。
これを表示するには、絶対パスで設定するしかないのでしょうか?

お礼日時:2006/11/02 10:33

> SEO対策などで動的ページを静的ページに見せたいのですが


> ユーザがアクセス(リンク先)は↓
> test.php?aid=00000001
> で、実行結果を返しつつ、URLは↓
> test/aid/00000001
> にしたいと考えているのですが・・・

そもそも、SEO対策では、リンクのHTML記述を、
<a href="/test/aid/0000001">ほげほげ</a>
にして、検索エンジンのクローラーがリンクを辿りやすいようにするのが目的ですよね?

なので、SEO対策では、mod_rewriteの設定だけではなく、
リンク元のページのHTMLの書き換えをしなければなりません。
#<a href="/test.php?aid=0000001"> だったものを、
#<a href="/test/aid/0000001"> にします。

リンク元のページがPHPで動的に生成されているのであれば、
ob_start関数などを用いて、出力バッファリングを行ない、
自動的にHTMLの記述を書き換える手もあります。
(参考)http://jp2.php.net/manual/ja/function.ob-start.php

それから、SEO対策としては、
<a href="/test/aid/00000001"> よりも、
<a href="/test/aid/00000001.html"> みたいに、
拡張子をhtmlにしたほうがよいと聞いたことがあります。
(実際の効果は、測定したことが無いから判りません)

この回答への補足

fdsjaklfjas さん ご回答ありがとうございます。
リンク先をご指示いただいたものにし、
.htaccess内に
RewriteEngine on
RewriteBase /home/test01/www
RewriteRule ^/test/(0-9A-Za-z]+)/([0-9]+)$ /test.php?$1=$2
としたのですがページがありません、と言われてしまいます。

補足日時:2006/11/01 12:10
    • good
    • 0

SEO対策などで動的ページを静的ページに見せかけるのならば、


test/aid/00000001
にユーザがアクセスした場合に、
test.php?aid=00000001
の実行結果のHTMLをユーザに返したいのですよね?

だとしたら、RewriteRule の引数1と2が逆ですね。
あと正規表現もおかしいです。
以下でどうでしょう。
RewriteRule ^/test/(0-9A-Za-z]+)/([0-9]+)$ /test.php?$1=$2 [L]

#PHPではなくapacheの話ですが。。。

この回答への補足

fdsjaklfjas さん ご回答ありがとうございます。
Apacheの話ですね。申し訳ありません・・・

SEO対策などで動的ページを静的ページに見せたいのですが
ユーザがアクセス(リンク先)は↓
test.php?aid=00000001
で、実行結果を返しつつ、URLは↓
test/aid/00000001
にしたいと考えているのですが・・・
考え方がおかしいでしょうか?

fdsjaklfjas さんのやり方で、やってみましたが、URLの書き換えが
行なわれません。

補足日時:2006/11/01 10:13
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!