• 締切済み

リダイレクトできません。クエリー文字列を含めたURLはリダイレクトしない?

.htaccessで http://example.com/index.php?%E3%83%8B%E3%82%B3%E3%83%8B%E3%82%B3%E5%8B%95%E7%94%BBwikihttp://example.com/ にリダイレクトさせようと思っています。 以下をを実行してもうまくいきません。 Redirect permanent /index.php?%E3%83%8B%E3%82%B3%E3%83%8B%E3%82%B3%E5%8B%95%E7%94%BBwiki http://example.com/ 以下の様にするといくのですが Redirect permanent /index.php http://example.com/test.php 上と下の違いはクエリー文字列が含まれていることだとおもいます。 クエリー文字列を含めるとリダイレクトは働かないのでしょうか? 文字列をなんらか形でエスケープする必要があるのでしょうか? javascriptだといくのですが、.htaccessだといきません。 教えてください。宜しくお願いします。

みんなの回答

  • aton
  • ベストアンサー率47% (160/334)
回答No.1

http://httpd.apache.org/docs/trunk/ja/mod/mod_alias.html には, <引用開始> od_alias は簡単な URL 操作向けに設計されています。 より複雑な操作、クエリーストリングの操作には、mod_rewrite で提供されるツールを使用してください。 <引用終了> とありますので,mod_rewriteを使うしかないのではないでしょうか? http://www.webmasterworld.com/apache/3197508.htm を見ると,RewriteCond %{QUERY_STRING} が必要そうです。 http://forums.digitalpoint.com/showthread.php?t=238321 http://www.kuri3.net/modules/bwiki/index.php?HttpdConf http://apache.rsz.jp/docs-ja/1.3/mod/mod_rewrite.html.ja.jis#RewriteCond などから推測するに,おそらくは, RewriteEngine On RewriteCond %{QUERY_STRING} ^%E3%83%8B%E3%82%B3%E3%83%8B%E3%82%B3%E5%8B%95%E7%94%BBwiki$ RewriteRule /index.php http://example.com/ [L, R=302] みたいにすればいいのではないでしょうか? #もしかしたら'%'は'\%'のようにエスケープする必要があるかもしれません。

参考URL:
http://httpd.apache.org/docs/trunk/ja/mod/mod_rewrite.html

関連するQ&A

  • htaccessでのクエリ付URLのリダイレクト

    .htaccessにて、Perlで作成されたスクリプトのURLを以下のようにmod_rewriteで変換を行っています。 RewriteEngine on RewriteBase /cgi/ RewriteRule ^([0-z]+)/([0-z]+)\.html$ index.cgi?mode=$1&no=$2 通常の場合、 http://example.com/cgi/index.cgi?mode=pv&no=1 といったURLが、mod_rewriteにて http://example.com/cgi/pv/1.html というURL形式でアクセスが可能です。 そこでやりたい事なのですが、上記のpvの箇所をpastという風に変更したいと思っています。 http://example.com/cgi/pv/1.html http://example.com/cgi/past/1.html スクリプト側の問題かも知れませんが、過去ログに移行したデータなどはpastになるのですが、何故かpv(現行ログ)でもアクセス出来てしまいまして、出来れば.htaccessでpastに統一したいと思っています。 そこで単純ながら、Redirect permanentを使い、 Redirect permanent /cgi/view/ http://example.com/cgi/past/ としたところ、リダイレクトはされるのですが、 http://example.com/cgi/past/1.html?mode=view&no=1 となってしまいます。 語尾のクエリ部分「?mode=view&no=1」が出ないようにしたいのですが、どのような方法があるか、ご教示頂けますと幸いです。 RewriteCond %{QUERY_STRING}なども調べて見たのですが、詳しくどう記述すれば良いかわかりませんでした。 よろしくお願いいたします。

    • ベストアンサー
    • CGI
  • パラメーター付きのURLをリダイレクトしたい

    お世話になります .htaccess でリダイレクトを行いたいのですが、パラメータ付きのURLの為かリダイレクトができません。 .htaccess内の記述↓ redirect 301 /aaa/bbb.php?N=1 http://www.aaa.com/index.html 「?=N1」の部分を取れば問題なくリダイレクトします パラメータ付きのURLはリダイレクト可能でしょうか? よろしくお願いいたします

  • リダイレクトについて

    /news/detail.php?id=777&c7=7 というURLから /news/777 というURLへリダイレクトしたいと思い、 Redirect permanent /news/detail.php?id= http://www.◯◯◯.com/news/ 上記のような記述をhtaccessに書いたのですが、 うまく行きませんでした。 この場合、どのような記述が正しいのでしょうか?

  • htaccessのリダイレクトについて

    html、phpなどの拡張子付きリクエストを、末尾がスラッシュの URLにリダイレクトしたいのですが、方法をご教示ください。 例えば、 http://www.hoge.com/hoge/ へのリクエストを、異なるサーバーの http://www.hoge2.com/hoge/ にリダイレクトしたいと考えており、以下のように記述しています。 #.htaccessの記述 Redirect permanent /hoge/ http://www.hoge2.com/hoge/ しかし、 /hoge/hoge.php のリクエストがあった場合、以下のようにドキュメント名を付加される ので困っています。 http://www.hoge2.com/hoge/hoge.php 宜しくお願いします。

    • ベストアンサー
    • PHP
  • 特定のリファラーのみリダイレクトでURLを指定したい(.htaccessの書き方)

    自分の管理外のWebサイトA,B,Cから"example.com"のトップページへ リンクされています。リンク元のURLは変更できないので、A,B,Cの 特定のページからのリファラーのみ"1.html"へリダイレクト(301) したいと思っています。※URLは全てダミーです リンク元 http://site-a.jp/a.html http://site-b.jp/b.html http://site-c.jp/c.html 現在のリンク先 http://example.com/index.html 移転先 http://example.com/1.html 【私が書いた.htaccessの内容】 SetEnvIf Referer "^http://site-a\.jp/a\.html" ref_a Redirect permanent /index.html http://example.com/1.html env=ref_a これではエラー500が返ってしまいだめでした。移転前と移転先は 同じなので、できればA,B,Cをまとめてセットして、リダイレクト の行は1つにしたいと思っています。無理なら1つずつ書きます。 よろしくお願い申し上げます。

  • 動的URLから静的URLへのリダイレクト

    htaccessで動的URLを静的URLに301リダイレクトしたいのですが、うまくいきません。 どのように記述すればよいでしょうか? 静的URL同士のリダイレクトしか分からず、困っています。 よろしくお願いします。 http://example.com/yyy.cgi?cate=1&page=1 リダイレクト先 http://example.com/zzz.htm

  • 静的に書き換えたファイルのリダイレクト方法

    Redirect permanentにてディレクトリを移転するために以下のような記述をしました。 Redirect permanent /detail/category/ http://www.test.com/category/ 移転前ディレクトリ内(/detail/category/)の.htaccess で RewriteRule ^([a-zA-Z0-9_-]+)$ detail.php?no=$1 [L] として静的に置き換えているページがあるのですが、これらのページがリダイレクトされると 移転前:http://www.test.com/detail/category/111 移転後:http://www.test.com/category/111?no=111 という感じの記述になってしまいます。 綺麗ににリダイレクトするにはどうすれば良いでしょうか?

    • ベストアンサー
    • PHP
  • index.htmlを省略してくるアクセスをリダイレクトしたい

    index.htmlを省略してくるアクセスをリダイレクトしたい お世話になっております。 ApacheのRedirect機能を持ちいて、 以下のように携帯キャリア毎に用意したindex.htmlファイルを外部サーバへと リダイレクトすることを目論んでいます。 ======================================================================= Redirect permanent /i/index.html http://www.hoge.co.jp/hoge/index.html ======================================================================= ところが、上記のように定義しても、http://www.example.jp/i/という風に、 index.htmlを省略してくるアクセスの場合、 http://www.hoge.co.jp/hoge/index.htmlにリダイレクトさせることができず、 200番の応答コードとともに、http://www.example.jp/i/index.htmlをApacheが返してしまっており 困っております。 http://www.example.jp/i/index.htmlと、 index.htmlを省略せずアクセスした場合には、 ちゃんと、301でhttp://www.hoge.co.jp/hoge/index.htmlへリダイレクトしてくれます。 また、同じApahceで必ずファイル名を省略せずにアクセスしてくるケースに対して、 たとえば、以下のように定義しているのですが、これも期待通りの動作となっております。 ======================================================================= Redirect permanent /i/xxxx.html http://www.hoge.co.jp/hoge/xxxx.html ======================================================================= ファイル名(index.html)を省略してくるアクセスをリダイレクトしたい場合、 どのように定義すれば期待通りの動作が得られるでしょうか。 リダイレクトの仕方は、ApacheのRedirectにこだわっていませんので、 何か実現可能な方法がありましたらどなたか教えて頂けますと大変助かります。 よろしくお願いいたします。

  • 日本語ファイル名を持つURLの301リダイレクトが動作しない

    .htaccessに日本語ファイル名を持つhtmlをUTF8でコード化されたものを使い、 Redirect permanent /%e6%97%a5%e6%9c%ac%e8%aa%9e.html http://example.com/abc/%e6%97%a5%e6%9c%ac%e8%aa%9e.html と設定しています。 ドメイン直下に置いていたhtmlを/abc/ディレクトリに入れたので、リダイレクトさせたいんですが、リダイレクトされずに404エラーとなります。 同様の記述で、他にも半角英数字のみのファイル名のhtmlをリダイレクトを設定してあり、それは正しくリダイレクトされます。 日本語ファイル名のリダイレクトの際に、特殊な設定などがあるのでしょうか? 検索で探してもヒットせず、どうすればいいのかわからず、困っています。

  • http → https リダイレクト

    【http://example.com】にアクセスしたら【https://example.com】へリダイレクトしたいのですが、indexファイルが【/var/www/html/index.html】にある場合、どのようにすればよいでしょうか?やり方はhttpd.confにリダイレクト指定をしても.htaccessファイルを用いても何でも結構です。記述方法がよくわからないのです。 ご存知の方、宜しくお願いします。

専門家に質問してみよう