【Apache】アドレスバーにリライト前のURLを表示

このQ&Aのポイント
  • Apacheリライトに関する質問です。要件は、リライト後のURLを表示しつつ、内部的にリライトさせる方法を知りたいということです。
  • 現在、http://ts1.example.com/xxxxx/test.cgi?hogehogeのURLをhttp://ts2.example.com/test.cgi?hogehogeにリライトする設定を行っています。しかし、ブラウザのアドレスバーにはリライト前のURLを表示したいと考えています。
  • 具体的には、http://ts1.example.com/xxxxx/test.cgi?hogehogeを入力した場合には内部的にリライトを行い、http://ts2.example.com/test.cgi?hogehogeにアクセスさせたいですが、アドレスバーにはリライト前のURLを表示したいという要望があります。
回答を見る
  • ベストアンサー

【Apache】アドレスバーにリライト前のURLを表示

Apacheリライトに関する質問です。 http://ts1.example.com/xxxxx/test.cgi?hogehogehttp://ts2.example.com/test.cgi?hogehoge というリライト設定を行いたいと思い、 RewriteRule ^/[^/]+/test.cgi http://ts2.example.com/test.cgi [L] という設定を入れました。 動作は問題ないのですが、ブラウザのアドレスバーのURLを http://ts1.example.com/xxxxx/test.cgi?hogehoge のままにしておき、内部的にリライトさせたいです。 (表面上は遷移していないように見せたい) 実現する方法はあるでしょうか? 宜しくお願い致します。

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

  • ベストアンサー
  • t-okura
  • ベストアンサー率75% (253/335)
回答No.2

Dynamic Mirror と呼ばれているリバースプロキシ的な使い方ですね。mod_proxy と組み合わせてやるようです。 マニアルには下記の例が挙がっています。 > RewriteEngine on > RewriteBase /~quux/ > RewriteRule ^hotsheet/(.*)$ http://www.tstimpreso.com/hotsheet/$1 [P] 詳しくは 参考 URL を Dynamic Mirror で検索して見てください。

参考URL:
http://japache.infoscience.co.jp/rewriteguide/
harahachi
質問者

お礼

この方法でうまくいきました。 シンプルな方法を教えていただき助かりました。 ありがとうございます。

その他の回答 (1)

  • SAYKA
  • ベストアンサー率34% (944/2776)
回答No.1

無理じゃないかな だって「rewrite」だし。(意味の話ね) それに、それが出来たらURL偽装が可能って話になるんだけど・・・?

関連するQ&A

  • httpd.confのURLリライトについて

    httpd.confのURLリライトについてご質問です。 環境 CentOS5.2 Apache 2.2.3 tomcat 5.5.25 Apacheとtomcatの連携でWebサーバを作成しております。 httpd.confでURLリライト設定をしておりますが、リライトが行われません。 以下httpd.confの設定内容です。※AAをBBにリライト AcceptPathInfo On RewriteEngine On RewriteRule BB AA [R] また.htaccessも試したのですが同じ結果です。 (httpd.confはAllowOverride Allとしてあります。) 設定後のApache、tomcatの再起動も行っております。 どなたか、原因に心当たりのある方、いらっしゃいますでしょうか?

  • 【Apache】リダイレクト、リライトの遷移先指定制限

    Apacheのリダイレクト、リライト設定について質問です。 リダイレクト(RedirectMatch)設定の場合、リダイレクト先のURLをフルパス 表記にしないと、ドコモの古い端末等で対応できないとの情報がありましたが、 リライト(RewriteRule)でも同様の制限があるのでしょうか? 宜しくお願い致します。

  • apache2 の httpd.conf 、cgi実行設定

    環境: vine 3.1 apache 2.0.50 confの設定を教えてください。 今まで apache 1.3.31だったのですが、アンインストールして apache 2.0 を入れました。 1.3のconfを見ながら2.0も設定できると思っていたんですが、 ユーザ(~チルダフォルダ以下)のCGIの実行設定ができません。 http://www.test.com/~hogehoge/ 配下でcgiを実行させたいのですが、500エラーが出てしまいます。 http://www.test.com/ 直下では実行できています。 非常に困っています。どうかお助け下さい・・・・・・

  • htmlのリンクについて(Apache)

    http://hogehoge.com/test/ にアクセス中に<a href="/index.php">リンク</a> と言ったようなリンクを踏んだ場合 本来なら/hogehoge.com/test/index.phpに遷移されると思うのですが 何故か/hogehoge.com/index.phpに接続されます。 http://hogehoge.com/test/test1/test2/から <a href="/index.php">リンク</a>で飛んだとしても /hogehoge.com/index.phpに接続されます。 以上の事から常にドメイン配下のindex.phpに接続されるようなのですが。 JS側やphpで制御されているようにも見えないのですが、 Apache側でこういった制御は可能なのでしょうか? 想定できるシステムとしてはどのようなものがございますか?

    • ベストアンサー
    • HTML
  • 複数の静的URLからアクセスできる重複コンテンツのまとめ方

    ドメインをexample.comとします。 現在、トップページが以下のようになっており example.com/ example.com/ja/ example.com/top/ example.com/ja/top/ これらがすべてmod_rewriteで同じページにアクセスできるようにしています。 example.com/en/ は英語ページになっています。デフォルトが日本語(ja)なので、jaなら普通のトップにリライトされるわけです。 リライトルールは以下のような感じです。 RewriteRule ^(.*)$ /ja/$1 [L] RewriteRule ^(ja|en)/$ /$1/top/ [L] 現在、このトップページが明らかに検索エンジンに弾かれています。 Yahoo、MSNの2つが特にひどいです。 ※ example.com/aaa などサブページは正当に掲載される もしかしたら重複URLのペナルティなのかな?と思っています。 そこで、301を使いうまくURLをまとめたいのですが、やはり見栄え的には example.com/ が検索結果の対象になって欲しいところです。 しかし、 RewriteRule ^ja/(.*)$ /$1 [301,L] は無限ループになってしまいます。 この場合は example.com/ja/top を検索結果の対象にしなければならないのでしょうか? また、そもそもこの程度でペナルティを受けるのでしょうか?別の対処方法は無いのでしょうか? よろしくお願いします。

    • 締切済み
    • SEO
  • htaccessのリライトとエラーページ

    .htaccessのリライトとエラーページについて .htaccessでリライトの設定をしているのですが、うまくいかない部分があります。 まずwww無しでのアクセスは全てwwwありへ変更しています。 RewriteEngine On RewriteBase / RewriteCond %{HTTP_HOST} ^○○○.biz [NC] RewriteRule ^(.*)$ http://www.○○○.biz/$1 [L,R=301] 上記は正常に動作しています。 次は設置しているcgiのURLの設定をしています。 RewriteRule search/(.*) cgi/search/$1 [L] ##正常に動作 RewriteRule ^search/([0-9]+)$ cgi/search/navi.cgi?mode=kt&kt=$1 RewriteRule ^search/([0-9]+)/$ cgi/search/navi.cgi?mode=kt&kt=$1 残りの2つがうまく動作していません。 本来のURLが下記なので http://www.○○○.biz/cgi/search/navi.cgi?mode=kt&kt=01 ↓こちらでアクセスしてみると http://www.○○○.biz/search/01 404 ページが見つかりません http://www.○○○.biz/search/01/ 500 サーバーエラーが表示されてしまいます。 正常に動作している方でURLを短縮しているのでcgiの階層指定をやめてみましたがダメでした。 RewriteRule ^search/([0-9]+)/$ search/navi.cgi?mode=kt&kt=$1 またエラーページを指定しているのですが、403と404は動作していますが500が通常のページが表示されてしまいます。(401は未確認) ErrorDocument 401 /error/401.html ErrorDocument 403 /error/403.html ErrorDocument 404 /error/404.html ErrorDocument 500 /error/500.html 色々と調べましたが何がいけないのか分からず手詰まり状態です。 お手数ですがご回答頂けると幸いです。

    • ベストアンサー
    • HTML
  • Apache Virtual Hostでの認証

    Apache の Virtual Host で認証をかけることはできますか? 以下のように設定したのですが、Apache起動時に Syntax error on line 1066 of /usr/local/apache2/conf/httpd.conf: AuthType not allowed here といわれます。 .htacessを使えば実現できるようですが、VirtualHostディレクティブ内で設定する方法はないでしょうか? <VirtualHost *:80> ServerAdmin test@example.com DocumentRoot /home/test ServerName test.example.com ErrorLog logs/test-error_log CustomLog logs/test-access_log common AuthType Basic AuthName "Restricted Files" AuthUserFile /home/test/.htpasswd Require user test </VirtualHost> よろしくお願いします。

  • mod_rewriteの挙動が不可思議。ログをみると、余計に不可思議・・・お助けを・・・

    CentOS4、Apache2を使っています。 ============================================ http://example.com/hogehoge というリクエストに対して、 mod_rewriteで http://example.com/index.php?QS=hogehoge の結果を返すようにしたいと思っています。 (http://example.com/ に対しては、http://example.com/index.php?QS= の結果を返せばOK) ============================================ そこで、 「.htaccess」に <IfModule mod_rewrite.c> RewriteEngine on RewriteRule ^/(.*)$ /index.php?QS=$1 [L] </IfModule> と書いたのですが、 http://example.com/hogehoge にアクセスしたら、not foundになってしまいました。 Apacheのエラーログをみると、 File does not exist: /var/www/example.com/htdocs/hogehoge でした。 で、mod_rewriteのログをみると下記のようでした。 ========================== ***.**.***.*** - - [11/Feb/2008:22:37:25 +0900] [example.com/sid#b80e7dd8][rid#b81db290/initial] (3) [per-dir /var/www/example.com/htdocs/] strip per-dir prefix: /var/www/example.com/htdocs/hogehoge -> hogehoge ***.**.***.*** - - [11/Feb/2008:22:37:25 +0900] [example.com/sid#b80e7dd8][rid#b81db290/initial] (3) [per-dir /var/www/example.com/htdocs/] applying pattern '^/(.*)$' to uri 'hogehoge' ***.**.***.*** - - [11/Feb/2008:22:37:25 +0900] [example.com/sid#b80e7dd8][rid#b81db290/initial] (1) [per-dir /var/www/example.com/htdocs/] pass through /var/www/example.com/htdocs/hogehoge ========================== (1)「/var/www/example.com/htdocs/hogehoge -> hogehoge」 と (2)「applying pattern '^/(.*)$' to uri 'hogehoge'」 というのが、不思議です。 どこのサイトを見ても、 RewriteEngine on RewriteRule ^/abc/(.*)$ /new/$1 [R=301,L] のようにやっているので、 ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆ (2)は 「applying pattern '^/(.*)$' to uri '/hogehoge'」のはずだと思うのですが・・・。 ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆ かといって <IfModule mod_rewrite.c> RewriteEngine on RewriteRule ^(.*)$ /index.php?QS=$1 [L] </IfModule> としてみると、今度はhttp://example.com/ にアクセスされたときに500エラーとなってしまいまして。。。 上の☆で囲んだ部分の疑問が強いので、問題の切り分けができていないかもと重い、 このエラーの原因は深くまだつっこんでいません。 どうして、このようになってしまうのでしょうか? (1)の挙動は、なんかしらの設定によるのでしょうか? そして、どうすれば、一番上に書いた、希望している動作となるのでしょうか? 以上、どなたかお教えいただければ、幸いです。

  • 競合するRewriteRuleの対策について

    以下のようなルールを実現したいと考えています。 http://hogehoge.com/ → http://hogehoge.com/ http://hogehoge.com/index.php → http://hogehoge.com/index.php http://hogehoge.com/<半角英語> → http://hogehoge.com/test.php?word=<半角英語> 3行目について以下の記載で実現できたのですが、この状態で、 上記の2行目のRewriteが行われないようにしたいのです。 RewriteEngine on RewriteRule (.*)$ test.php?word=$1 恐れ入りますが、ご指導お願いいたします。

    • ベストアンサー
    • HTML
  • mod_rewriteでの'?'表示

    http://www.example.com/search.cgi?a=mypage&b=go&c=1&d=2 を、 http://www.example.com/mypage/go/search?c=1&d=2 に変えたいですが、どのようにすればよいのでしょうか? htaccessでは・・・ Options +FollowSymlinks RewriteEngine on RewriteRule ^/([0-9A-Za-z]+)\/([0-9A-Za-z]+)\/search?c=([0-9A-Za-z]+)&d=([0-9A-Za-z]+)$ /search.cgi?a=$1&b=$2&c=$3&d=$4 [L] にしてもアクセスできません… APACHEマニュアルでは「?」は文字数指定と言う文法に なるらしく、「?」を表示させたいです。 http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html#RewriteRule どうすればよろしいでしょうか?ご教示ください。