• 締切済み

mod_rewriteの設定方法について教えてください。

mod_rewriteで下記のようにURLの書き換えの設定を行っているのですが、 実際のURL [A] http://hogehoge.com/index.cgi?a=123&b=abc ↓ アクセスするURL [B] http://hogehoge.com/123/abc/ となるように、下記のように設定を行ったのですが、 --------------------------------------------------------- RewriteEngine on RewriteCond %{HTTP_HOST} ^([^:]+) RewriteRule ^/([^\/]+)/([^\/]*) http://%1/index.cgi?a=$1&b=$2 [L,R] --------------------------------------------------------- 上記の設定を行ったうえで[B]にアクセスすると正しく[A]にアクセスは出来るのですが、ブラウザのアドレス欄は[A]のURLに変換されて表示されます。 これを[B]の表示のままにすることって可能なのでしょうか? もし可能なようでしたらその設定方法を教えていただけないでしょうか。 よろしくお願いいたします。 ApacheバージョンはApache/2.0.52です。

みんなの回答

  • t_ohta
  • ベストアンサー率38% (5081/13277)
回答No.3

すいません 「​」は投稿時になにか変な文字が混ざって文字化けしたのだと思います。 RewriteRule ^/([^\/]+)/([^\/]*) /index.cgi?a=$1&b=$2 [L] です。

Mr_Bajil
質問者

お礼

何度もありがとうございます。 「​」をとっても結果は同じでした。 うーん。なかなか簡単じゃないんですね。。。

  • t_ohta
  • ベストアンサー率38% (5081/13277)
回答No.2

アクセスするURLのホスト名と実際のURLのホスト名が同じなら、以下のようにしてみてはいかがでしょうか。 RewriteEngine on RewriteRule ^/([^\/]+)/([^\/]*) /index.cgi?a=$1&b=$2​ [L] 記憶が定かではないので間違っているかもしれませんが、書き換え後のURLがhttp://で始まっているとリダイレクトの扱いにされてしまった気がします。

Mr_Bajil
質問者

お礼

ご連絡ありがとうございます。 ご指定の通り試しましたところ、URLは変わりませんでしたが、リダイレクトされず「ページが見つかりません」となってしまいました。 ちなみに「​」って何か意味のあるものなのでしょうか? また、 RewriteEngine on RewriteRule ^/([^\/]+)/([^\/]*) /index.cgi?a=$1&b=$2​ [L,R] として試してみたところ、一番最初と同様、リダイレクトされ、URLも変換されてしまいました。

  • t_ohta
  • ベストアンサー率38% (5081/13277)
回答No.1

RewriteRule のフラグを [L] だけにしたらどうでしょう。

Mr_Bajil
質問者

お礼

早速のご回答ありがとうございます。 [L]だけで試しましたが結果は変わりませんでした。

関連するQ&A

  • mod_rewriteが効かない!

    サーバの運用上、mod_rewriteを使う必要が出来たので設定してみたのですが効きません。 FreeBSD4.11+Apache1.3.33で httpd.confファイルに直接書き込んで試しています。 LoadModule rewrite_module modules/mod_rewrite.so AddModule mod_rewrite.c のどちらも書いてあるにもかかわらず、下記のテスト設定を試してみたらローカルIPからアクセス出来てしまいます。 RewriteEngine on RewriteCond %{REMOTE_ADDR} ^192\.168\.1\. ←ローカルネットワークのアドレス RewriteRule ^.*$ - [F] どのようにしたらいいですか? アドバイスお願い致します。

  • mod_rewriteについて教えてください。

    mod_rewriteについてお願いします。 「a」と「b」というフォルダにそれぞれ「index.html」「test.html」が入っています。「a」と「b」で「index.html」「test.html」の内容はちがいます。 わたしが一番望んでいるのは http://example.com/a/以下にアクセスがあった場合 http://example.com/b/以下にリダイレクトさせるというものです。 例) http://example.com/a/test.htmlにアクセスがあったらhttp://example.com/b/test.htmlにリダイレクト。 ------------------------------------------------------------ Options +FollowSymLinks AddHandler cgi-script htaccess <IfModule mod_rewrite.c> RewriteEngine on RewriteRule ^/a/$ /b/$1 [R=302,L] </IfModule> ------------------------------------------------------------ としてみましたが、リダイレクトされません。 ちなみに RewriteRule ^$ /b/$1 [R=302,L] と書くと、http://example.com/にアクセスがあった場合 http://example.com/b/にリダイレクトされましたので mod_rewriteには対応しております。 ご教授のほど、よろしくお願いいたします。

  • mod_rewriteを使用するための設定について

    お世話になります。 mod_rewriteの設定についてアドバイスいただきたいと思います。 今までレンタルサーバーで.htaccessを使って、動的URLを静的URLでアクセスさせることに用いていたのですが、自前サーバー(FedraCore2.0+Apache2.0.53)にその.htaccessファイルを移してみたところ、思ったような動作をしてくれません。色々なサイトを参考に見て回ったところ、「httpd.conf」が怪しいと感じたのですが、 LoadModule rewrite_module modules/mod_rewrite.so LoadModule proxy_module modules/mod_proxy.so の箇所もコメントアウトされておりますし、過去ログにもあったバーチャルホストの併用もしておりません。 ちなみに.htaccessは下記のような内容です。 DirectoryIndex index.htm index.php .ht RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^doc-([0-9]+).htm+ doc.php?number=$1 レンタルサーバーでは問題なく動作しておりましたので、.htaccess側の問題ではなくApache側の問題だと思っております。どなたかアドバイスの程よろしくお願いいたします。

  • mod_rewrite設定について

    mod_rewrite設定について mod_rewriteでcgiに渡す引数の一部のみを書き換えることは可能でしょうか。 具体的には下記のような挙動を実現したいです。 http://mydomain.com/test.cgi?status=true&action=1 ↓ http://mydomain.com/test.cgi?status=false&action=1 2つ目の引数は複数のパターンが想定されています。 下記のようなrewriteの設定を試してみましたが リダイレクトされませんでした。 ~~~~~~~~~~~~~~~~~~~~~ RewriteEngine on RewriteRule ^/test.cgi?status=true(.*) http://mydomain.com/test.cgi?status=false$1 [QSA] ~~~~~~~~~~~~~~~~~~~~~ 助言をいただけないでしょうか。 よろしくお願い致します。

    • ベストアンサー
    • HTML
  • mod_rewriteでアドレスを書き換えたい

    mod_rewriteでアドレスを書き換えたい思っています。 xamppでテストしていますがうまくいきません。 mod_rewrite.soの#は外しています。(つまり、.htaccess以外の設定はできていると思います) 【やりたい事】 localhost/test/index.php?p=test を  ↓ localhost/test/i/test でアクセスしたいです。 【参考にした情報】 http://www.sample.com/cgi-bin/sample/sample.cgi?a=123&b=456 というURLを静的なアドレスでアクセスできるように以下のように設定します。 RewriteEngine on RewriteRule ^/cgi-bin/sample/([0-9A-Za-z]+)/([0-9A-Za-z)]+)\.html$ /cgi-bin/sample/sample.cgi?a=$1&b=$2 [L] を言うのを見つけました。 【試したこと】 .htaccessをつくり RewriteEngine on RewriteRule ^/test/i/([0-9A-Za-z)]+)$ /test/index.php?p=$1 [L] と記入 【結果】 Object not found! 要求された URL は本サーバでは見つかりませんでした。 もし手入力で URL を入力した場合は、綴りを確認して再度お試し下さい。 と表示されました。 ------------------------------------------------------------------ localhost/test/i/testでアクセスするには、.htaccessをどう書けばいいのでしょうか? 疑問1.xamppでlocalhostでmod_rewriteができるのだろうか? 疑問2.参考にした情報のRewriteRuleの"^"がわからない。正規表現の"^"とは文頭にマッチすると思います。この場合の文頭とは? よろしくお願いします。

  • httpsでmod_rewriteができない

    はじめまして。 Linux環境で、apacheのhttp.confにmod_rewriteを記載し、httpsとhttpを切り替えたいと思っています。 httpd.confに以下のように記述しています。 <IfModule mod_rewrite.c> RewriteEngine on  #(1)httpで/aaaa/bbbbにアクセスされたときにhttps://~に変えたい RewriteCond %{REQUEST_URI} ^/aaaa/bbbb RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R]  #(2)httpsで/cccc/ddddにアクセスされたときにhttp://~に変えたい RewriteCond %{REQUEST_URI} ^/cccc/dddd RewriteCond %{HTTPS} on RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R] </IfModule> 上記(1)のhttpでのアクセス時には、mod_rewriteが効いてhttpsへ切り替えられるのですが、 上記(2)のhttpsでのアクセス時には、mod_rewriteが効いていないようでhttpへ切り替えられません。 rewriteログを見てみると、当サイトへhttpでアクセスした場合にはログが出力されますが、 httpsでアクセスした場合には出力されません。 そもそもhttpsでのアクセスの場合にhttpd.confのmod_rewriteが効いていないようです。 ですが、これに対しどこを調査すべきかが分かっていません。 SSLの設定自体は出来ていると思っていて、 https://xxxx.jpのようにアクセスするとちゃんとページが表示されます。 どの当たりに問題がありそうでしょうか? 解析のヒントを頂けたらと思います。 宜しくお願い致します。

  • 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)の挙動は、なんかしらの設定によるのでしょうか? そして、どうすれば、一番上に書いた、希望している動作となるのでしょうか? 以上、どなたかお教えいただければ、幸いです。

  • mod_rewriteの書き方について

    mod_rewriteの書き方について いつもお世話になっております。 mod_rewiteについて質問させていただきます。 複数の設定をしたいのですが、404のエラーが出てしまい思っている動作になりません。 -------------------------------------------------- RewriteEngine on (1) RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule hoge/(.*)\/(.*)\/(.*)\/(.*)\.html$ /hoge/$1/$2.php?$3=$4 [L] RewriteRule hoge/(.*)\/(.*)\/(.*)\/(.*)\/(.*)\/(.*)\.html$ /hoge/$1/$2.php?$3=$4&$5=$6 [L] (2) RewriteRule (.*)\.html$ /$1.php [L] -------------------------------------------------- 上記の設定を記載しております。 (1)はパラメーターがあった場合、URLの書き換えをしています。 ここはちゃんと動作しております。 (2)で、http://www.hoge.com/dir/index.html にアクセスした場合 /dir/index.php を呼び出すことに成功はしています。 ただ、http://www.hoge.com/dir/category.html にアクセスした場合 PHPファイルではなく、HTML(/dir/category.html)の場合404のエラーになってしまいます。 分かりづらい説明で申し訳ございませんが、ご教示よろしくお願いいたします。 [環境]  PHP:5.1.6  Linux:調べられません・・・わりと新しいバージョンです。

  • mod_rewriteについて

    mod_rewriteの質問です。 RewriteEngine on RewriteCond %{TIME_DAY}.html -s RewriteRule index.html test.php RewriteRule index.html %{TIME_DAY}.html と記述しているのですが、 %{TIME_DAY}.html が存在するのに、 RewriteCond部分でないと判定され、 %{TIME_DAY}.html が読まれてしまいます。 RewriteCond部分の条件部分の記述方法が間違っているのでしょうか?

  • mod_rewriteについて

    いつもお世話になっております。 mod_rewriteを使ってURLの書き換えをしたいと思っております。 下記のようなファイルがあるとします。 http://www.domain.com/aaa/list.php http://www.domain.com/aaa/detail.php http://www.domain.com/bbb/list.php http://www.domain.com/bbb/detail.php PHPファイルはHTMLに書き換えています。 ---------------------------------------- RewriteEngine on # QUERY_STRING RewriteRule /([a-z]+)\/([a-z]+)\/([0-9]+)\.html$ /$1/$2.php?$3 [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule (.*)\.html$ /$1.php [L] ---------------------------------------- http://www.domain.com/aaa/detail/2.html http://www.domain.com/bbb/detail/2.html 上記どちらにアクセスしてもページが表示されませんと なってしまいます。 どうぞ、ご教授お願いいたします。 <環境> PHP:4.3.2 Apache:2.0.40 (Red Hat Linux)

    • ベストアンサー
    • PHP