apacheを使ったリダイレクトについて質問です。


・元々index.htmlというファイルが存在します
・xxx/xxx/index.html?aaa=1&bbb=2というURLを叩いた際に
 index.cgi?aaa=1&bbb=2にリダイレクトしたい

・以下の記述をすると、普通にindex.htmlを見ても
 (パラメータが無い状態で見ても)リダイレクトされてしまう
# RedirectMatch "xxx/(.*)/index.html?aaa=1&bbb=2

指定のパラメータがついている場合だけ、リダイレクトさせたいのです。
具体的な書き方や、サンプルを示して頂ける方、御教示ください。宜しくお願いします。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2008/07/07 21:35:02
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答4件)

id:pahoo No.1

回答回数5960ベストアンサー獲得回数633

ポイント23pt

Rewriteモジュールを使うといいでしょう。

以下に、記述例を示します。

RewriteEngine On
RewriteBase /xxx/xxx
RewriteRule index\.html\?aaa=1\&bbb=2 index.cgi?aaa=1&bbb=2 [L]

参考サイト

id:freewriter

ありがとうございます。でも、上手く動きません。。

大変恐縮ですが、再度アドバイスいただけますでしょうか。

・bbbの値は可変です。

・xxx/xxx/index.html?aaa=1&bbb=123456というURLを叩いた際に

 xxx/index.cgi?aaa=1&bbb=123456に飛ばしたいです。

rewritebaseの値が変わってくると思い、いろいろいじっていますが上手くいきません。

出来れば是非たすけてください!

2008/07/01 00:47:09
id:kn1967 No.2

回答回数2915ベストアンサー獲得回数301

ポイント23pt

mod_aliasではなくmod_rewriteを用いる事が可能ならば

RewriteEngine on
RewriteRule ^/xxx/(.*)/index.html?(.*) /xxx/$1/index.cgi?$2 [L]

といったような感じに直せば良いのですが

mod_aliasではお望みのようなことは出来なかったと思います。

.htaccessのmod_rewriteの質問です。 リダイレクト・正規表現を使うと思います。 http://www.hoge.com/54343.html のようなディレクトリ配下のhtmlへのアクセスを全て http.. - 人力検索はてな

id:freewriter

ありがとうございます。mod_rewrite了解です。試してますが、なかなか上手くいきません。。

2008/07/01 00:47:56
id:tezcello No.3

回答回数460ベストアンサー獲得回数69

ポイント22pt

www.hoge.com/zzz/xxx/yyy/index.html?aaa=1&bbb=2

へのアクセスを

www.hoge.com/zzz/xxx/index.cgi?aaa=1&bbb=2

  yyy はどんな値が来るか不問

  aaa, bbb などのクエリは名前も値も数も不問 全てを index.cgi へ渡す


へ渡すと仮定して回答します。


zzz のディレクトリへ以下の内容の .htaccess を置きます。

RewriteEngine On
RewriteBase /zzz
RewriteRule ^aaa/yyy/index.html aaa/index.cgi [QSA,L]

zzz ではなく、xxx がルート直下であるなら、 RewriteBase の行は不要です。



http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html

id:freewriter

頂いたものを元に色々いじったら、できました!

大変ありがとうございました。感謝します。

2008/07/01 23:15:11
id:poch-7003 No.4

回答回数43ベストアンサー獲得回数8

ポイント22pt

mod_rewriteを読み込んでる前提です.

テスト環境がなくて試してませんがこんな感じでしょうか.

RewriteEngine on
RewriteCond %{REQUEST_URI} index\.html
RewriteCond %{REQUEST_URI} aaa=.*
RewriteCond %{REQUEST_URI} bbb=.*
RewriteRule ^/xxx/index\.html\?aaa=(.*)&bbb=(.*)$ /xxx/index.cgi?aaa=$1&bbb=$2 [L]

アクセスログを見ながら設定すると,どこにリダイレクトされているか分かりますよ.

http://www.net-newbie.com/trans/mod_rewrite.html

id:freewriter

頂いたものを元に色々いじったら、できました!

大変ありがとうございました。感謝します。

2008/07/01 23:15:16
  • id:tezcello
    ごめんなさい。
    クエリがついている場合のみというつもりでつけていた
    RewriteCond %{QUERY_STRING} !^$
    を書き出すのを忘れたみたいです。
    更に
    > 指定のパラメータがついている場合だけ、リダイレクトさせたいのです。
    という条件を忘れていました。
    重ねてごめんなさい。

    RewriteCond %{QUERY_STRING} ^aaa=1
    この1行を RewriteRule の前に入れてください。
    aaa=1 が先頭であるか不明な場合はハット(^)を削除してください。
  • id:poch-7003
    私もミスです.
    RewriteCond %{REQUEST_URI} aaa=.*
    RewriteCond %{REQUEST_URI} bbb=.*
    の%{REQUEST_URI}は%{QUERY_STRING}の間違いです.
    正しくは,
    RewriteCond %{QUERY_STRING} aaa=.*
    RewriteCond %{QUERY_STRING} bbb=.*
    ですね.
  • id:pahoo
    下記URLを参考に、mod_rewriteが有効になっているかどうか確認してください。
    http://www.cakephp.jp/doc/ch03s05.html
  • id:freewriter
    皆様、ありがとうございました!

    頂いたものを元に色々いじったら、できました。
    大変ありがとうございました。感謝します。

    ちょっと世界が広がりました~

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません