- 締切済み
.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の記述経験がなく、色々調べてはみたのですが、よく分かりませんでした。 どうかよろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- 4017B
- ベストアンサー率73% (1336/1814)
ん~、何か「ロリポップ」さん色々と問題があるみたい?ですね…。 >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=clnk >http://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=clnk >http://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% (1336/1814)
鯖が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」は非常に便利に思えるため安易に使用しがちですが、前述の通り無限ループが発生し易いので出来るだけ使用を避けた方が賢明です(管理者が知らない間に何万回というループ地獄を起こしている事もままあります)。
補足
お返事いただきありがとうございます。参考になりました。 しかし無理でした。 oldディレクトリにアクセスすると、その中のindex.htmlが、 それ以外へのアクセスは404が表示されました(index.html以外すでにファイルを削除しているからでしょう)。 なんででしょう・・? RedirectMatch permanent以外、 RewriteRuleなどに置き換えてもみたのですが・・ よかったらアドバイスをお願いします。 ちなみにサーバーはlolipopです。 http://lolipop.jp/manual/hp/htaccess/