• 締切済み

ApacheのRewriteRule

現在、ApacheのRewriteRuleにてちょっと困っています。 例 RewriteRule ^hoge/(.*)/(.*)/ /hoge.php?$1=$2 [L] という感じで、記述しています。(実際はもっとちゃんと書いていますが) これは、URLの静的化としての対応です。 想定としては、第1引数にクエリのキー 第2引数に値といった感じで考えているのですが %2Fが入ってきたときにうまく動作しません。 %2Fは「/」ですね たとえば、こんなURLがあったとします。 /hoge/q/aaa%sFbbb/ というアクセスがあったとき、上記例にてマッチしないみたいです。 (たぶん内部的に、/hoge/q/aaa/bbb/ってアクセスになってるぽい?) このような場合の対処法ってないのでしょうか? 一応ですが、RewriteMapでエスケープ用のPG作って対処できそうなのですが、この手法だと現状のサーバーではできないので>< ほかに方法がないのかなぁと。。。 (RewriteMap escape int:escapeとかですね。)

みんなの回答

  • memphis
  • ベストアンサー率40% (975/2395)
回答No.1

AllowEncodedSlashesディレクティブをONにすればいいです。 ただし、apacheのバージョンが古いと使えません。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ApacheのRewriteRuleで、元のURLにアクセスさせない方法

    例えば、Apache の設定で、以下のように、hoge.html にアクセスすると、fuga.html を呼ぶようにします。 RewriteEngine on RewriteRule ^hoge\.html$ fuga.html もちろん、このままでは、直接 fuga.html にもアクセス可能ですが、直接、fuga.html にアクセスすることを拒否することは可能ですか?

    • 締切済み
    • PHP
  • ApacheのRewriteRuleについて

    ApacheのRewriteRuleで困っています。 以下のURLを /gr/15bd60625f36edee4051b82e021d7a7f1137487409.php?categoryID=1&TitleID=38 このようなURLに置き換えて実行させようと思っています。 /grco/index.php?cat=1&id=38 mod_rewriteを導入し(動作確認済み) Apacheのhttpd.confに以下の定義を追加しいろいろと やっていますが・・うまくいきません。 URLの?がうまく処理できていないようです。 引数部分の置き換えができていません。 RewriteRule ^/gr/(.*)(.\.php)([^\?]*)(.*)$ /grco/index.php?cat=$1&id=$2 [L] 何か指定に問題があるのでしょうか? お手数ですが、ご存知の方がいらっしゃいましたら アドバイス等いただければと思います。 よろしくお願いします。

  • mod_rewriteの変換について

    こんにちは。 現在、業務でmod_rewriteの設定をしているのですが、こまっています。 やりたい事は http://localhost/hoge/aaa/bbb/ のアクセスがきた時に http://localhost/hoge/?action_aaa_bbb_index=true の内容を表示したいです。 但し、URLは http://localhost/hoge/aaa/bbb/ という感じです。 他のサイトで調べて、設定をしたのですがどうしても http://localhost/hoge/aaa/bbb/ アクセスすると http://localhost/hoge/以下のディレクトリィが表示されてしまいます。 また最後のオプションを[R]にすると表示はされますが http://localhost/hoge/?action_aaa_bbb_index=true にURLが書き換わってしまいます。 (これは当然なので、認識しています。) 以下、設定を記述します。 よろしくお願いします。 ■環境 windows XP apache2.2 ■記述箇所 httpd.conf --------設定内容--------- RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^/hoge/([0-9A-Za-z]+)/([0-9A-Za-z]+)/?$ /hoge/?action_$1_$2_index=true [L] AllowEncodedSlashes On

  • RewriteRuleで動的URLを静的URLに見せたい

    ご存知の方がいらっしゃいましたら、 ご指導いただきたいと思っています。 http://example.com/hoge.do?itemNo=123456(以下"A") という動的URLのリンクを http://example.com/hoge/123456(以下"B") という静的URLに見えるようなリンクに変えようと思っています。 そして、 "B"にアクセスした場合"A"の内容をブラウザに表示しつつ、 ブラウザのURL欄を"B"のままにしたいと思っています。 そこで、httpd.confに以下の設定をして、"B"にアクセスしたところ・・・ 1行目 RewriteEngine on 2行目 RewriteRule ^/hoge/(.*)$ /hoge.do?itemNo=$1 「Web ページがみつかりません(HTTP 404 )」 が帰ってきてしまいます。 そこで試しに httpd.confの設定を以下のように変えて、"B"にアクセスしたところ・・・ 2行目 RewriteRule ^/hoge/(.*)$ /hoge.do?itemNo=$1 ↓ 2行目 RewriteRule ^/hoge/(.*)$ /hoge.do?itemNo=$1 [R] "A"の内容をブラウザに表示され、ブラウザのURL欄は"A"のままとなってしまいます。 どのようにしたら、本来の想定どおりの動きができるのか? 何か他の設定がおかしいのか? どなたか心当たりがあればヒントをください。 どうかよろしくお願いします。

  • 引数処理に$ENV{'PATH_INFO'}を用いた際のクッキーについて

    自作cgiの引数を $ENV{'PATH_INFO'}を用いた形式 (hoge.cgi/aaa/bbb/cccという形式)に変更しました。 ところが、組み込んでいるアクセス解析用のクッキーが 本来ならば hoge.cgiに対してクッキー1個となるはずですが、 hoge.cgi で1個目 hoge.cgi/aaa で2個目 hoge.cgi/aaa/bbb で3個目 hoge.cgi/ccc で4個目  ・・ と、引数が変わるたびに発行されてしまいます。 ブラウザで確認すると同じ内容のクッキーが アクセスした際の引数の分だけズラズラと羅列されています。 本来あるべき形である hoge.cgiに対してクッキー1個にするには どのようにしたら良いのでしょうか。

    • ベストアンサー
    • CGI
  • apacheにおいてmod_rewriteのRewriteRuleを動的に設定したい

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

  • HPを階層構造した際のWebページ表示について

    例えば下記を例に挙げさせていただきます。 【例1】 サーバのルートディレクトリに index.html がある。 (1) http://aaa.net/       ←にアクセス (2) index.html          ←index.htmlの内容が表示される これは <http://aaa.net/ = http://aaa.net/index.html> が同じだと理解できます。 【例2】 (1) http://aaa.net/bbb/     ←にアクセス Q1.どこの階層にあるどのファイルを読み込んでいるのでしょうか? Q2.http://aaa.net/bbb/ にアクセスしてもページが表示されるには    どのようにしたらいいのでしょうか。

  • Apacheの設定

    こんにちは。質問させてください。 あるアプリケーションをPHPで作成しました。 このアプリケーションを別PCからIPアドレスをしていして IEで動かしたいと思います。 この場合、Apacheのインストール時にIPを設定してあげれば 他のPCからアクセスしてそのアプリケーションを 動作することが可能なのでしょうか? 現在は作成したアプリケーションのPCで localhost/・・・とURLを入力して動かしています。 (※他のPCから http://aaa.bbb.ccc.ddd/rentyu.phpとURLを入力して 作成したアプリケーションを動作させたいということです。) 宜しくお願いいたします。

  • 【Apache】バーチャルホストの設定について

    質問させていただきます。 Ubuntu 14.04 Apache 2.4.7 にて運用中のWebサーバがあります。 今、このサーバ上で http://aaa.com(非SSL) https://bbb.com(SSL) という2つの異なるドメインのサイトを運用しているのですが、 https://aaa.com とすると、警告が出た後、https//bbb.comのトップページが表示されてしまいます。 これをhttps://aaa.comにアクセスがあった場合、http://aaa.comにリダイレクトさせたいのですが、Apacheのバーチャルホストにてどのような記述をすればよろしいのでしょうか? 大変お手数ですが、お教えいただけると幸いです。

  • Apacheのproxyについて

    ■やりたいこと URLを書き換えずにAPACHEにproxyとして動作させたい ■背景 現在、右の名前(仮)で運用しているサイトがあります。http://hoge1.hoge.jp/ ※PC用サイトです。 このサイトを9月中旬に現在の環境とは異なる環境へ、 物理的に移管します。 移管は段階的に行うため、 http://hoge1.hoge.jp/の新サーバを物理的に構築はしますが、 そちらには当初コンテンツのせず、 DNSでhoge1.hoge.jpのIPだけ新サーバのIPに切り替え、 その新サーバから旧サーバへコンテンツをとりにいき、 それをエンドユーザへ返答させたいと思っております。 ■検討していること・試したこと ApacheのProxyPassを使ったプロキシを試しました。 ProxyPass / http://192.168.1.1/hoge.html ※ /は新サーバのドキュメントルートです ※192.168.1.1は旧環境(移管前の環境)と理解してください。 この場合、ブラウザから新サーバへアクセスすると、 アドレスバーのURLは、http://192.168.1.1/hoge.htmlに書き換えられてしまいます。 これをやめたいので、mod_rewirteを試してみました。 RewriteRule ^/(.*)$ http://192.168.1.1/hoge.html/$1 しかし、ProxyPassの時と同じように、 ブラウザのURLが書き換わってしまいます。 mod_rewirteの機能としては、 このようなURLの書き換えは正しい動きと理解していますが、 これをどうにかURLを書き換えないで、 当初アクセスしたままのURLをブラウザのアドレスバーに 表示させておきたいと考えております。 何かよい方法はありますでしょうか? ご教授よろしくお願いします。