• 締切済み

.htaccessでリダイレクトさせたいのですが、単純転送ではありませ

.htaccessでリダイレクトさせたいのですが、単純転送ではありません。 アクセス先に応じて転送先を変えたいです。 ルール通りではないので、人力的な転送になるかと思います。 http://hogehoge.net/old/ というドメインとディレクトリがあったとします。 うち、oldのディレクトリ及びそれ以下のアクセスを転送させたいです。 この場合、oldディレクトリに.htaccessを置いて転送させればいいかと思うのですが、 以下のような場合はどういう記述をすれば実現できますでしょうか? 1、/old/index.php?p=1と/old/index.php?p=2は、http://mogemoge.net/new/1.htmlへ転送 2、/old/index.php?p=3と/old/index.php?p=5は、http://mogemoge.net/new/2.htmlへ転送 3、/old/index.php?p=4は、http://mogemoge.net/new/3.htmlへ転送 4、上記以外(oldディレクトリ以下、index.php、index.php?p=6など)は全て、http://mogemoge.net/new/index.htmlへ転送 .htaccessの記述経験がなく、色々調べてはみたのですが、よく分かりませんでした。 どうかよろしくお願いいたします。

  • cnkozo
  • お礼率39% (158/402)
  • HTML
  • 回答数2
  • ありがとう数9

みんなの回答

  • 4017B
  • ベストアンサー率73% (1301/1772)
回答No.2

ん~、何か「ロリポップ」さん色々と問題があるみたい?ですね…。 >http://webcache.googleusercontent.com/search?q=cache:sKIGQg9NePcJ:ranran2.net/app/2ch/hosting/1220857310/+%E3%83%AD%E3%83%AA%E3%83%9D%E3%83%83%E3%83%97+lolipop+htaccess+php&cd=2&hl=ja&ct=clnkhttp://webcache.googleusercontent.com/search?q=cache:DT4tj0JUkjUJ:www.start-point.net/update/2010/05/php5.html+%E3%83%AD%E3%83%AA%E3%83%9D%E3%83%83%E3%83%97+htaccess+php5&cd=7&hl=ja&ct=clnkhttp://webcache.googleusercontent.com/search?q=cache:3job-lHZbu0J:an-nai.jp/web-tips/+%E3%83%AD%E3%83%AA%E3%83%9D%E3%83%83%E3%83%97+lolipop+htaccess+%E4%BD%BF%E3%81%88%E3%81%AA%E3%81%84+php5&cd=1&hl=ja&ct=clnk とりあえず例文の最後の部分の RedirectMatch permanent ^/*$ http://mogemoge.net/new/index.html ~を RedirectMatch permanent ^/old/*$ http://mogemoge.net/new/index.html にしてみて下さい。多分、ダメだと思いますが…。 これ以上は実際に設定を触れないと、何とも出来ないですね(Try&Errorで絞り込めない)。 後は前にも言いました通り、 ErrorDocument 404 http://hogehoge.net/old/redirect.html ~みたいな記述をしておいて、後は個々の閲覧者にブックマーク更新などを促すしか無いと思います。その時の注意点としては、エラーが出た場所に強制的に指定されたドキュメントを引っ張って来るという動作になりますので、この時に呼び出されるHTML等に含まれるURL類は全て“絶対URL”で記述して置いて下さい。そうして置かないと前述の警告通り、無限ループが発生します。

  • 4017B
  • ベストアンサー率73% (1301/1772)
回答No.1

鯖がUNIX系(Apache)なら以下の様な感じで。 以下の記述を .htaccess をRootの最上位階層に設置します。尚、実際には動作検証はしてないので、うまく動作しなくても自己責任でお願いします(後述の“無限ループ”に注意)。 ##----------<Start>------------------## # "http://hogehoge.net/old/" to "http://mogemoge.net/new/" # using "RedirectMatch permanent". RedirectMatch permanent ^/old/index\.php\?p=1$ http://mogemoge.net/new/1.html RedirectMatch permanent ^/old/index\.php\?p=2$ http://mogemoge.net/new/1.html RedirectMatch permanent ^/old/index\.php\?p=3$ http://mogemoge.net/new/2.html RedirectMatch permanent ^/old/index\.php\?p=4$ http://mogemoge.net/new/3.html RedirectMatch permanent ^/old/index\.php\?p=5$ http://mogemoge.net/new/2.html RedirectMatch permanent ^/*$ http://mogemoge.net/new/index.html ##----------<End>--------------------## P.S. 老婆心ながら「Redirect」は予期せぬ動作を引き起こす事も多く、無限ループが発生し易いので推奨出来ません。 出来れば「ErrorDocument」で置き換えて、閲覧者自身に個別でブックマーク等の更新作業を促す方向性の方が宜しいかと…。「Redirect」は上方マッチなので、「/old/index.php?p=1」と「/old/index.php?p=12345」を同じURLと解釈します(例文で「RedirectMatch」を使っているのはそのためです)。 ErrorDocument 403 error.html ErrorDocument 404 error.html ErrorDocument 500 error.html ~の様に記述して、error.html に具体的な振り分けURLを記述するとか? 一見すると「Redirect」は非常に便利に思えるため安易に使用しがちですが、前述の通り無限ループが発生し易いので出来るだけ使用を避けた方が賢明です(管理者が知らない間に何万回というループ地獄を起こしている事もままあります)。

cnkozo
質問者

補足

お返事いただきありがとうございます。参考になりました。 しかし無理でした。 oldディレクトリにアクセスすると、その中のindex.htmlが、 それ以外へのアクセスは404が表示されました(index.html以外すでにファイルを削除しているからでしょう)。 なんででしょう・・? RedirectMatch permanent以外、 RewriteRuleなどに置き換えてもみたのですが・・ よかったらアドバイスをお願いします。 ちなみにサーバーはlolipopです。 http://lolipop.jp/manual/hp/htaccess/

関連するQ&A

  • htaccessでリダイレクト

    http://www.○○○/index.php?s=sample というアドレスを http://www.◆◆◆/ にリダイレクトしたいと思っています。 htaccessに下記のように記述しました。 RedirectPermanent /index.php?s=sample http://www.◆◆◆ が、リダイレクトしませんでした。 次に下記のように記述してみました。 RewriteEngine on RewriteRule ^([0-9A-Za-z_]+)/$ index.php?s=$1 [L] RedirectPermanent /sample/ http://www.◆◆◆ すると、 http://www.○○○/index.php?s=sample にアクセスすると、リダイレクトはしますが、 リダイレクト先のアドレスが、 http://www.◆◆◆s=sample となり、引数が残ってしまいます。 原因もわからず、どのようにしたらいいかが全くわかりません。 どなかたお教えください。

    • ベストアンサー
    • PHP
  • .htaccessの301リダイレクトについて

    hogehoge.comというドメインがあり、 複数のサブドメインを利用しております。 https://abc.hogehoge.com/ https://def.hogehoge.com/ https://ghi.hogehoge.com/ Linuxサーバではサブドメインごとにディレクトリがあり /var/www/html/abc /var/www/html/def /var/www/html/ghi となっております。 今回ドメインの変更があり new-domain.comになったとして、それぞれのサブドメインにアクセスされた時に以下のURLに301リダイレクトさせたいと考えております。 転送先:https://abc.new-domain.com/ 転送元:https://abc.hogehoge.com/ 転送先:https://def.new-domain.com/ 転送元:https://def.hogehoge.com/ 転送先:https://ghi.new-domain.com/ 転送元:https://ghi.hogehoge.com/ 他のディレクトリには影響させたくないので 各ディレクトリに.htaccessを置きリダイレクトさせたいのですが、 それぞれの.htaccessは同じ中身(汎用的)にする事は可能でしょうか? 301リダイレクトについて不慣れで困っております。 恐縮ですが、どなたかご助力頂きたいと思います。

  • htaccess リダイレクト機能の利用法を教えてください。。

    お世話になっております。 仮のURLで質問させて頂きます。 http://www.pine.co.jp/ma/index.htmlにアクセスがあった場合に、 https://wadax55.wadax.ne.jp/~pine-co-jp/ma/index.html にリダイレクトされるようにしたいのです。 そこでインターネットにありました以下文章を読んだのですが、よくわからないのです・・。お手数ですが教えてくださいますようお願い致します。 .htaccessでは、ディレクトリー構造そのままにリダイレクトさせることも可能です。 Redirect permanent /test/ http://www.shtml.jp/htaccess/ とすれば、http://www.shtml.jp/test/以下にあるファイルへのアクセスがあった場合には、リダイレクトされます。例えば、http://www.shtml.jp/test/basic.htmlへのアクセスは、http://www.shtml.jp/htaccess/basic.htmlへリダイレクトされます。 自分でこうかな?と思うやり方をトライしてみたものの悉く失敗し、めげています…。図々しいのですが、、、つまりどのように.htaccessファイルに記述し、それをどこに設置すればいいのでしょうか・・・?ファイルもだけれどもhtaccessというフォルダが必要なのか??というレベルです。 申し訳ございません。。。 教えて頂けますと大変助かります。

  • .htaccessのリダイレクトの書き方

    .htaccessのリダイレクト処理で http://sample.com/index.phpにpost情報込みでアクセスがあった場合、 「www統一」 「index.phpなし」 「index.phpなしアドレスにリダイレクトされた場合もpostの値を取得できる」 という条件を満たすコードはどのようにすれば良いのでしょうか? 「www統一」や「index.phpなし」は説明サイトも多いので可能なのですが、リダイレクト後のURLでもpostの情報を取得する方法がわかりません。 どうそよろしくお願いします。

    • ベストアンサー
    • HTML
  • php化して、.htaccessでリダイレクトしたが、index.phpが強制的に表示されてしまう

    1.トップページをhtmlからphpに変更しました。 旧)http://www.hoge.com/index.html 新)http://www.hoge.com/index.php 2.「.htaccess」に301リダイレクトを記述しました。 Redirectpermanent /index.html http://www.hoge.com/index.php 3.困ったこと http://www.hoge.com/ でアクセスしたときに http://www.hoge.com/index.php に転送されてしまう。 できれば、 http://www.hoge.com/ このまま表示してほしいんですが、 .htaccessの記述に問題があるのでしょうか? すみません、分かる方には簡単なのかもしれませんが、 教えて頂ければ助かります。

    • 締切済み
    • PHP
  • リダイレクトの設定について httpd.conf .htaccess

    リダイレクトに関して質問させていただきます。 今回、WEBサイトを閉鎖するにあたり、現在のサイトにアクセスした場合(全てのディレクトリ)、一度インデックスページにリダイレクトさせ、そのページにサイト閉鎖の案内を出そうと思っています。 リダイレクトさせるため、.htaccessに下記の記述をしたのですが、サイトのインデックスのページ(index.html)にアクセスすると、ループ状態になってしまいます。 【記述内容】 Redirect permanent / http://xxx.co.jp/index.html http.confも変更・修正ができますので、どういう記述をすれば、ループに陥ることなくスムーズなリダイレクトができるかご教授ください。

  • htaccessで同一サーバ内リダイレクト処理

    LAMP環境にてウェブページの作成を行っております。 htaccessは使用できる環境になっておりまして、こちらを使用してリダイレクト処理を行いたいと思っております。以下のようなリダイレクトです。 http://www.hoge.jp/fuga ↓ http://www.hoge.jp/redirect/index.html このような形のリダイレクトを行うため、以下のような記述をhtaccessに記述しました。 Redirect temp http://www.hoge.jp/fuga/ http://www.hoge.jp/redirect/index.html すると、リダイレクト先のURLが http://www.hoge.jp/redirect/redirect/redirect/・・・/index.html ridirectがループしてしまい、正しいURLにリダイレクトすることができません。 リダイレクトを解消するためのhtaccessの設定方法など分かりましたら、 ご教授いただけますでしょうか。 よろしくお願い致します。

  • .htaccessによりリダイレクトされるサイトの一部だけリダイレクト

    .htaccessによりリダイレクトされるサイトの一部だけリダイレクトされないようにできませんか? ドキュメントルートhome/直下の.htaccessには、下記の記述がされています。 RewriteEngine on RewriteRule .html$ http://www.sample.com/index.php ↑これは、拡張子が.htmlのページを表示しようとしたらwww.sample.com/index.php(TOPページ)へリダイレクトさせるという意味かと思うのですが、 home/webalizer 直下には、自動的に○○○.htmlファイルが生成されるようになっており、 このファイルを開こうとしても、TOPページにリダイレクトされてしまい、 FTP等でダウンロードしてからでないと内容を確認できません。 ルート直下の.htaccess は手を加えたくないので、 home/webalizer直下に、何らかの記述の.htaccessファイルを置くことにより、webalizer内の.htmlファイルだけはリダイレクトせずに開けるようにできないものでしょうか?

    • ベストアンサー
    • PHP
  • .htaccessでリダイレクト

    サイトのディレクトリ構造やファイル名を変えたため、 外部からのリンクが切れてしまっています。 .htaccessを設置したディレクトリ以下で ファイルが見つからない場合、TOPページにリダイレクト、 という動作を実現するにはどう記述すれば良いのでしょうか。 TOPページを http://www.hoge.com/ とすると、 とりあえず思いつくのは ErrorDocument 404 / なのですが、404エラーをエラー表示以外の リダイレクトに使うのが正しいのか分かりません。 こういう目的のリダイレクトの書式もあるのでしょうか。 よろしくお願いします。

  • リダイレクトで「自動転送設定がループしています」

    サイトリニューアルに伴いディレクトリ構造が変わるので、.htaccessで以下のように書いてリダイレクトしようと思いましたが、「このアドレスへのリクエストに対するサーバの自動転送設定がループしています。」と出てリダイレクトが出来ません。 Redirect permanent /aaa/bbb/ccc/xxx.html http://hoge.com/aaa/123 試しにリダイレクト先を全く別のURLにしてみたら正常にリダイレクトされるので、上記の記述自体は問題ないと思うのですが、新しいサイトにはdrupalを使っていて、.htaccessには以下の内容が予め記述してあります。何かバッティングしているのでしょうか? <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} !=/favicon.ico RewriteRule ^(.*)$ index.php?q=$1 [L,QSA] </IfModule> PHPは5.2.5です。

    • 締切済み
    • PHP