.htaccessで404エラーページにユーザーが要求したページのアドレスを送る方法

このQ&Aのポイント
  • htaccessを使用して、404エラーページにユーザーが要求したページのアドレスを送る方法について教えてください。
  • htaccessファイルを使用して、404エラーページに転送先のページのアドレスを送る方法を知りたいです。
  • htaccessで設定した404エラーページにユーザーが要求したページのアドレスを送る方法を教えてください。
回答を見る
  • ベストアンサー

.htaccessで、404エラーページにユーザーが要求したページのア

.htaccessで、404エラーページにユーザーが要求したページのアドレスを送る方法 今、htaccessで以下のような文を打ちました。 ErrorDocument 404 http://testa.com/index.php この.htaccessファイルは http://testb.com/に設置してあります。 それで、この転送先にPHPスクリプトを置いて転送を複雑化したいと思っています。 例えば、 http://testb.com/blog/ にアクセスを要求したら http://testa.com/index.php内で htaccessから送られてきたデータ(blog/等)を元に、 http://testc.com/blog/へのリンク・移転メッセージの表示をしたい。 それで、htaccessから送られてくるデータが分かればPHPは自力で作れます。 なので、htaccessからユーザーが要求したページのアドレスを404のエラーページに送る方法を教えてください。

noname#179848
noname#179848

質問者が選んだベストアンサー

  • ベストアンサー
noname#130824
noname#130824
回答No.3

http://testb.com/.htaccessに RedirectMatch ^(.*)$ http://testa.com/index.php$1 http://testb.com/blog/ へのアクセスが http://testa.com/index.php/blog/ に転送されるはず。 index.phpの$_SERVER["PATH_INFO"]に/blog/が入るはず。

noname#179848
質問者

お礼

ありがとうございます。うまくいきました。 最終的に RedirectMatch ^(.*)$ http://testa.com$1 と記述した、.htaccessファイルをhttp://testb.com/において、転送通知ページを介さず直接新URLに飛ぶことにしました。 このたびは本当にありがとうございました。

その他の回答 (2)

noname#116331
noname#116331
回答No.2

404エラーページを使う方法ではありませんが・・・。 存在しないページへのアクセスをhttp://testa.com/index.phpに転送し、 その際にリクエストURIは送れるとおもいます。 RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ http://testa.com/index.php?$1 [R=302,L] index.phpの$_SERVER["QUERY_STRING"]で取得できるはずです。

参考URL:
http://xn--u8jxb9ib9150b2px.jp/htaccess/rewritetop.html
noname#179848
質問者

お礼

新サイト運営で、他のことに応用できそうです。ありがとうございました。

noname#179848
質問者

補足

返事が遅くなって申し訳ございません。 先ほど試してみたら500 Internal Server Errorがでて、.htaccessファイルが正しくないようです。 なにか、他に策がございましたら教えてください。 よろしくお願いいたします。

  • php504
  • ベストアンサー率42% (926/2160)
回答No.1

内部リダイレクトなら REDIRECT_URL などの環境変数が使えますが外部リダイレクトだと無理ではないでしょうか ErrorDocument 404 http://example.com/index.php の場合リクエストしたブラウザにリダイレクトのステータスコード(404ではなく301)とリダイレクト先のURL(http://example.com/index.php)が渡されるだけなのでどうしようもない気がします

noname#179848
質問者

お礼

内部リダイレクトでも、うまくいきませんでしたが、調べていると、他の事も知れてよかったです。 ありがとうございました。

noname#179848
質問者

補足

ありがとうございます。教わったことを参考に以下のようなスクリプトを打ってみました。 .htaccessの中身 ErrorDocument 404 /move.php move.phpの中身 <? //略 $hyoji = '<a href="http://example.com/' . $_SERVER['REDIRECT_URL'] . '">'; echo $hyoji; //略 ?> こうすると、リンク先がhttp://example.com/になってしまい、REDIRECT_URLに入っているはずの内容が表示されません。php側でREDIRECT_URLだけechoやprintで表示させても空欄のままです。REDIRECT_URLを送付するにはhtaccessの中に他に付け加えなければならないことがあるのでしょうか? ちなみに、このファイル群はhttp://example2.com/に設置してある物とし、http://example2.com/testにアクセスした場合の現象とします。 もしくは、PHPがダメなのでしょうか 教えてください よろしくお願いします あと、環境を入力し忘れていたので追記いたします。 Linux Kernel 2.6系 Apache1系(suexec構成) Version 5.2.13 mod_php動作 safe_mode有効 mbstring有効 mbregex有効 mysql有効 mysqli有効(MySQL改良版拡張モジュール) pdo-mysql有効 zlib有効 gd有効 mcrypt有効 exif有効 レンタルサーバーなので使用書きをまるまるコピーしました

関連するQ&A

  • .htaccessの設定

    ご教授宜しくお願い致します。

 下記web構成です。 トップページに
index.htmlがあり、他ページはabcのフォルダの中にさらにindex.htmlをおいています。
 トップページのアドレスの表示は、
http://www.sample.com/(仮)です。 abcのフォルダのページのアドレスは
http://www.sample.com/abc/ です。

 この状態で、404エラーを全てのページに適応させたいのですが、
自作の404.htmlのエラーページを作成し、.htaccessに下記記述をしました。 
ErrorDocument 404 /404.html

 しかし、これですと、
http://www.sample.com/ にのみしか適応にならず、他のページhttp://www.sample.com/abc/などは、読み込んではいるものの、CSSや画像の読み込みが出来ていない状態です。文字だけの表示となってしまいます。 

また、.htaccessに下記記述をすると ErrorDocument 404 http://www.sample.com/404.html 全てのページに適応になるのですが、 
http://www.sample.com/abc/404.html
といったアドレスになり、「404.html」という表示をさせたくないのです。

 何とか、.htaccessの記述で、全てのページに適応する記述方法はないでしょうか?

 どなたかご教授お願い致します。
宜しくお願い致します。

    • ベストアンサー
    • HTML
  • .htaccessを使いエラーが起きたら飛ばす

    Apacheで.htaccessを使いアクセス制限をしようとしています。 そして403エラーが起きたら指定のファイルにリダイレクトするというのを試みているのですがうまくいきせん。 問題点を絞るべくなるべく簡単にしてみました。 a.phpファイル (http://xxx.yyy.co.jp/ に存在します) <?php print("a"); error_log("a"); ?> b.phpファイル (a.phpと同様にhttp://xxx.yyy.co.jp/ に存在します) <?php print("b"); error_log("b"); ?> .htaccessファイル ErrorDocument 403 http://xxx.yyy.co.jp/b.php deny from all <Files ~ "\.(html|php)$"> allow from all </Files> この.htaccessの意図は拡張子がhtmlとphpのファイルだけにアクセスを許可します。 そしてそれ以外でアクセスしてきて403エラー(forbidden)が出た場合b.phpにリダイレクトしようとしています。(話を簡単にするため他のエラーについては省略します) 問題が出る流れ 1:まずブラウザでhttp://xxx.yyy.co.jp/a.phpにアクセスします。 2:なぜか ErrorDocument 403 に引っかかり http://xxx.yyy.co.jp/b.php に飛んでしまいます。 もちろんこのとき http://xxx.yyy.co.jp/ に a.php はちゃんと存在しています。 よって「ErrorDocument 403 http://xxx.yyy.co.jp/b.php」をまるごと.htaccessから削除してもう一度アクセスしても当然403エラーは出ません。 ちなみに本当にエラーだった場合の処理はうまくいっていて、存在しないファイルで例えば下記のようなURLでアクセスをした場合は正しく http://xxx.yyy.co.jp/b.php に飛びます。 http://xxx.yyy.co.jp/a.ccc 問題は何故エラーでもないのにErrorDocument 403で飛んでしまうのかです。 やはり.htaccessの設定の仕方が悪いのでしょうか。

    • ベストアンサー
    • PHP
  • .htaccessの記述方法(このファイルを隠す。エラーページ)

    .htaccessファイルで下記のようなことをする記述方法を教えて下さい。 (1)指定ページが見つからない、削除されてしまったっ場合。 参考:http://allabout.co.jp/internet/hpcreate/closeup/CU20031019A/index2.htm ErrorDocument 404 /notfound.html (2).htaccess自体を隠す。 参考:http://htaccess.pasoa.com/itself.htm <Files ~ "^\.ht"> deny from all </Files> ファイルに <Files ~ "^\.ht"> deny from all </Files> ErrorDocument 404 /notfound.html 記述したのですが、エラーが出ました。 また、設置は、.htaccess・notfound.htmlをアスキーモードで、index.htmlと同じ位置にアップロードし、属性を606する。

    • ベストアンサー
    • HTML
  • .htaccessについて

    「ロリポップレンタルサーバー」で.htaccessファイルを設置したのですが、 なぜか「500エラー」が出てしまいます。 何が原因なのか分からないでしょうか? 【問題の.htaccessファイル】 <Files ~ "^\.(htaccess|htpasswd)$"> deny from all </Files> Options +MultiViews Options -Indexes ErrorDocument 401 http://hoge.com/error/401.htm ErrorDocument 403 http://hoge.com/error/403.htm ErrorDocument 404 http://hoge.com/error/404.htm ErrorDocument 500 http://hoge.com/error/500.htm RewriteEngine on RewriteCond %{HTTP_HOST} ^(www\.hoge\.com)(:80)? [NC] RewriteRule ^(.*) http://hoge.com/$1 [R=301,L] DirectoryIndex index.htm Redirect permanent http://hoge.com/sub http://sub.hoge.com/ order deny,allow [EOF] ちなみに「.htaccess Editor」というサイトで作ったものを少しいじりました。

  • htaccessでユーザ毎にページを振り分けたい

    お世話になります。 Basic認証でユーザ認証を行った後、ユーザ毎に違うページを表示したいと考えています。 (さくらVPS、Ubuntu12.04を利用) <例>  ドキュメントルート → /var/www/hoge  UserA → /var/www/hoge/userA/index.html  UserB → /var/www/hoge/userB/index.html この時、  ・.htpasswdにユーザIDとパスワードを記載  ・.htaccessにRewriteRuleとRewriteCondを記載し転送設定をする  ・ユーザAはユーザB用のページを見れないようにする  ・ユーザAはuserA以下のディレクトリは全て見られるようにする という条件の下設定を行いたいのですが、htaccessの記述ルールがよくわからず、 どうにもうまくいきません。 レベルの低い質問でもうしわけありませんが、ご回答いただけたら幸いです。 よろしくお願いします。

  • windows7ユーザフォルダにアクセス禁止させる

    ユーザフォルダ(C:\Users\testA)にデフォルトの設定では他のユーザが誰でもアクセスできてしまうのを、誰もアクセスできないように設定したいです。 アカウント:testA グループ:管理者(administrator) アカウント:testB グループ:管理者(administrator) アカウント:testC グループ:標準ユーザ 3つのユーザを作って切り替えて使っているのですがデフォルトの設定では ユーザフォルダC:\Users\testA にユーザtestBもtestCもアクセスできてしまいます。(これがwindows7のユーザ管理のデフォルト仕様?) ここでのアクセス状態は、 ユーザtestBはtestAフォルダ以下を参照可能、ファイルの中身も閲覧可能です。 ユーザtestCはtestAフォルダ以下を参照可能、ファイルの中身は閲覧不可です。 windows XPの場合は、アカウントを作成するときに「フォルダとファイルをプライベートにする」みたいな設定にチェックをすれば、 同じadministratorであっても、他のユーザフォルダにアクセスはできなかったはずなんですが、 windows7ではそういうのが無く、標準ユーザあっても管理者ユーザであってもデフォルトの設定では他人のユーザフォルダを見れてしまうようです。 testAにアクセスを禁止するにはtestAのセキュリティ設定からアクセスさせたくないユーザを 外すなどして、デフォルトから設定変更するなど、めんどくさいことをしないといけないのでしょうか?   他に簡単なやり方があるのでしょうか? windows7 Home Premium です。

  • .htaccess エラーページについて

    .htaccessでエラーページを自作のものになるよう設定したいのですが、上手くできず、困っています。 自作したのは404と403のみ。 ErrorDocument 403 絶対パス ErrorDocument 404 絶対パス という記述です。 確認したところ404エラーページは難なく表示されるのですが、403に関しては再読み込みしないと自作のものにならず、「~を開こうとして多くのリダイレクトが発生しています。あるページへのリダイレクトが設定されているページを開いたときに、リダイレクト先のページから元のページにさらにリダイレクトが設定されている場合にこうした現象が起きる場合があります。」というページになり、リダイレクトループしてしまっているようなのです。 使用サーバーはロリポップ ブラウザはsafariです。 解決法又は原因など教えて下さると助かります。 よろしくお願いいたします。

  • .htaccessは2つ置けないんでしょうか?

    携帯サイトをロリポップにて作成しています。 PCからアクセスした際、ソースを覗かれないようにするため IPアドレスによる制限をしています。 ファイル名.htaccess order deny,allow deny from all #Docomo IPアドレス #Vodafone IPアドレス #au(cdmaOne)とTu-ka IPアドレス #au(WIN) IPアドレス #au(BREW) IPアドレス 上記のファイルにてPCからのアクセスを防ぐ事が出来るのですが、 エラーページの設定も.htaccessにておこなっています。下記 ファイル名.htaccess ErrorDocument 401 http://URL ErrorDocument 403 http://URL ErrorDocument 404 http://URL ErrorDocument 500 http://URL 上記ファイルにてエラーページの設定は完了なのですが .htaccessを2つ置こうとすると、上書きされてしまい 一つだけになってしまいます。 2つの.htaccessを置きたい場合はどのようにしたら良いでしょうか? どなたかご存知の方、ご教授頂けると幸いです。 よろしくお願い致します。

  • htaccessのエラー制御について

    htaccessの中で ErrorDocument 403 を記述しページのアドレスを記入したらエラー番号に対するページを表示できるんですが、htpasswdでBASIC認証させた場合にIDパスワードがエラーの場合の対応するページというのを表示させたいのですができるのでしょうか? よろしくお願いします。

  • .htaccessで403error時に表示するページの設定

    現在、.htaccessで403エラーになったときに表示されるページの設定をしているのですが、 作成した403用のページを表示できず、ブラウザのデフォルト403ページが表示されてしまっています。 .htaccess自体は正常に動作しているのを確認しているため、 ErrorDocumentに関連する記述が誤っていると思うのですが、どこがおかしいのかが分かりません。 どうぞご教授お願いいたします。 なお、403時に表示されるページのアドレスは、(サイトURL)/error/403.html、すでにサーバー上にアップ済です。 下記が現在記述している.htaccessになります。 AddHandler cgi-script htaccess SetEnvIf Accept-Language ko Lilith SetEnvIf Accept-Language en Lilith ErrorDocument 403 /error/403.html Order Allow,Deny Allow from all deny from env=Lilith deny from .ed.jp deny from .ac.jp