• ベストアンサー

mod_rewriteの書き方について

Apacheのmod_rewriteを使って以下のことを実現したいです。 ~~~~~~~~~~ http://example.com/apple/orange/grape にアクセスが来た場合、 http://example.com/apple/orange/grape.png に転送 ~~~~~~~~~~ よろしくお願いします。

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

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.1

テストしてませんが、/apple/orange/.htaccess に、 RewriteEngine on RewriteBase /apple/orange RewriteRule ^grape$ grape.png リライトを使わず、ファイル名自体をgrapeに変えてしまう(orコピーする)方法もありますね。こっちのほうがわずかに効率が良いです。 同じく/apple/orange/.htaccess に、 <Files "grape"> ForceType image/png </Files>

cluster_9902
質問者

補足

説明不足でした。appleおよびgrapeの部分は可変です。 つまり、ファイル名決め打ちで転送することは出来ません。 正規表現やワイルドカードを使って対応する必要があります。 ただし、grapeにおける「拡張子がない」点は共通しています。 orangeのみ固定されています。

その他の回答 (1)

  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.2

RewriteRule も Files も正規表現使えますよ。詳細はマニュアルを参照して下さい。

関連するQ&A

  • 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には対応しております。 ご教授のほど、よろしくお願いいたします。

  • 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

    あるレンタルサーバーで独自ドメインでサイトを運営していますが、以下のようなサブドメインの扱いを実現できる方法を探しています。 使用している独自ドメイン example.com 構成 /home/user01/www/index.html /example/index.php レンタルサーバーのエイリアス設定で「example.com」または「www.example.com」で/example/index.phpを表示するよう設定。 やりたいこと ブラウザのアドレスバーへ入力 → 実際のURL(飛ばし先) http://user.example.com/ → http://example.com/index.php?p=user http://abcd.example.com/ → http://example.com/index.php?p=abcd サブドメインは事実上クエリーなので、userの場合はとかabcdの場合はといった、事前定義的なものができません。 レンタルサーバーのためバーチャルホストは使えません。htaccessとmod_rewriteは使用可能なため、なんとかこれらで実現できないかと考えています。 これに近いことができるという表記が http://www.kawaz.jp/pukiwiki/?mod_rewrite#w1eddb33 にありましたが、自分の環境で試したところ「サーバーが見つかりません」と表示されうまく動きませんでした。最後の改行とか、そのへんのところは大丈夫です。 詳しい方、教えていただけないでしょうか。よろしくおねがいします。

  • 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での'?'表示

    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 どうすればよろしいでしょうか?ご教示ください。

  • apacheにおいてmod_rewriteのRewriteRuleを動的に設定したい

    apache2.xにおいて、mod_rewriteを用いて URLの動的な書き換えを行っていますが、 正規表現ではなく、URLの一部を用いて、外部(DB等)に問い合わせて、 その結果を元に書き換えができる方法を探しています。 例えば http://example.co.jp/aaa/ というURLにアクセスがあった場合、 aaaをキーにしてDBに問い合わせて、その結果を元に rewriteを行う、といったイメージです。 mod_rewriteのマニュアルを読んだのですが、 そのような事が出来そうな項目はありませんでした。 方法or代替策等ご存じの方 教えていただければと思います。

  • mod_rewrite の記述について

    .htaccess に、mod_rewrite の記述を書いて、以下のようなことをしたいのですが、 1.http://www.example.com/abc/ の場合 URLはそのままで、内容は /main/abc/以下 (の同名ファイル)を表示 2.http://www.example.com/main/abc/ の場合 URLは http://www.example.com/abc/ になり、内容は/main/abc/を表示 以前教えていただいた以下の記述でできるのですが、ディレクトリが追加されたら、.htaccess にも追加が必要になってしまいます。 どのように実現すればよいでしょうか? ------------------------------------------------------------ RewriteCond %{REQUEST_URI} ^/main/(.*)$ RewriteCond %{HTTP:My_Redirect} !yes RewriteRule ^main/(.+)$ http://example.com/$1 [QSA,R] RewriteCond %{REQUEST_URI} ^/(abc|aaa|bbb|ccc|ddd)/ RequestHeader set My_Redirect yes RewriteRule ^(.*)$ /main/$1 [QSA,L] ------------------------------------------------------------

  • mod_rewrite について

    MVC モデルで web app を作る場合、mod_rewrite で url を「書き換え」て、1つのソースコードですべてのアクセスを処理する、 みたいなことはよくやられると思うのですが、 巷の情報を漁ってみると、 「mod_rewrite では post で渡されたパラメタを取得できない」 とのことでした。 でもこれって、リダイレクトした場合に、そうなることがありえるって話ですよね? mod_rewrite って、url を「書き換え」てるだけじゃないんでしょうか? url を書き換えて、リダイレクトまでされているんでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • mod_rewriteでURLの書き換えができない

    mod_rewriteでURLの書き換えを行おうと思っていますが なぜだか以下のような現象となりURLの書き換えが正常に行うことが できません。 【期待する動作】 (1)のようなURLでアクセスした場合、(2)のようなURLに 書き換えを行いたいが、(3)のようなURLになってしまい 正常に書き換えが行われない。 (1) http://example.com/hoge/list/01/01 (2) http://example.com/hg/list/360/01 (3) http://example.com/hg/list/.asp/360/01 ※ (1)のURLに含まれない拡張子のようなものが含まれてしまう。 【.htaccessの設定】 RewriteEngine on RewriteBase / RewriteRule ^hoge/list\/?(.*)$ /hg/list/$1 [R=301,L,QSA] 【環境】 OS:CentOs Web:Apache2.x その他:.aspという拡張子のファイルはPHPが動作するように設定してあります。 おそらくどこかの設定でこのような現象になってしまっているのだと思いますが、 どこの設定を見たら良いか検討がつきません。 どんな些細なことでも結構ですので、助言を頂けたら幸いです。

  • Apache mod_rewriteが .htaccess ではうまく適用できない

    mod_rewriteで書き換えに挑戦しているのですが、うまく動いてくれません。 やりたいことは、 http://www.example.com/ 以下をすべて http://www.example.com/index.php に書き換えたい。 開発中は直接 httpd.conf を編集できるため RewriteEngine on RewriteRule ^/((?!css|js|img).*)$ /index.php?&%{QUERY_STRING} [L] 上記で問題なく動いているのですが、htaccessではinternal errorかACCESS forbidden, object notfound などでうまく以後来ません。 ためしに、 RewriteRule aaa index.php?&%{QUERY_STRING} [L] として、http://www.example.com/aaa にアクセスしても object notfound が返ってきます。 ^aaa としたり ^aaa$ としたり、いろいろ試してるのですが全滅・・・ 検索して見つかったサンプルなどをそのままコピーしても使えません。 ちなみに、開発環境では Apache2.2.4。 公開用では 1.3系 の予定です。 Apache2.2.4 の httpd.conf ではOK。htaccess ではOUT。 難しい・・・