htaccessマッチの失敗と修正方法

このQ&Aのポイント
  • htaccessの書き方でマッチが失敗し、全てのリクエストがall.cgiに渡されてしまう問題が発生しています。
  • リクエストURI中に「abc」という文字列が3回以上出現する場合にはabc3.cgiを、1回から2回の場合にはabc12.cgiを動作させるという条件を設定しています。
  • 手直し方法としては、RewriteCondの正規表現パターンを修正し、マッチする条件を適切に指定すれば解決する可能性があります。
回答を見る
  • ベストアンサー

htaccessのマッチが失敗します

下記のように書いていますがうまく動作しません。 どのように手直しすればうまくいきますでしょうか??? hostname/abc_abc_ab_abc.html というテストを作ってみたのですが、本来であれば、abc3.cgiへ渡されるはずなのですが、全て、all.cgiへ渡されてしまいます。 お分かりになる方、宜しくお願い致します。 RewriteEngine on RewriteBase / ##リクエストURI中に、abcという文字列が3回以上ならabc3.cgiを動作させる RewriteCond %{Request_URI} "^(abc){3,}$" [NC] RewriteRule ^(.+)$ abc3.cgi?$1 [L] ##リクエストURI中に、abcという文字列が1から2回ならabc12.cgiを動作させる RewriteCond %{Request_URI} "^(abc){1,2}$" [NC] RewriteRule ^(.+)$ abc12.cgi?$1 [L] #どれにもマッチしない場合、all.cgiを動作させる。 RewriteRule ^(.+)$ all.cgi?$1 [L]

  • Perl
  • 回答数2
  • ありがとう数2

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

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

それなら ##リクエストURI中に、abcという文字列が3回以上ならabc3.cgiを動作させる RewriteCond %{Request_URI} abc.*abc.*abc [NC] RewriteRule ^(.+)$ abc3.cgi?$1 [L] ##リクエストURI中に、abcという文字列が1回以上(3回未満)ならabc12.cgiを動作させる RewriteCond %{Request_URI} abc [NC] RewriteRule ^(.+)$ abc12.cgi?$1 [L]

ayaka19801201
質問者

お礼

ありがとうございました!! とても助かりました!

その他の回答 (1)

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

abcで始まってabc.htmlで終わるなら RewriteCond %{Request_URI} "^abc.*abc.*abc\.html$" [NC] かな

ayaka19801201
質問者

お礼

回答いただきありがとうございます!! mukankei_abc_ab_abc_abc_abc_abc_mukankei_.html など様々なテストをしたいのですが、 URL中に挟まれる、abcという文字列の数や、出てくる場所が予測できません。 そこで、abcという文字列の出現回数によって振り分けをしたいのですが、うまくマッチしてくれません。 どうすればいいでしょうかね・・・涙;

関連するQ&A

  • Zend Frameworkの.htaccessが分からない

    ので教えてください。 .htaccess: SetEnv APPLICATION_ENV development RewriteEngine On RewriteBase /zend23/kubo/public RewriteCond %{REQUEST_FILENAME} -s [OR] #(1) RewriteCond %{REQUEST_FILENAME} -l [OR] #(2) RewriteCond %{REQUEST_FILENAME} -d #(3) RewriteRule ^.*$ - [NC,L] #(4) RewriteRule ^.*$ index.php [NC,L] #(5) において (1),(2),(3)はどういう意味でしょうか? また (4),(5)においてRewriteRuleは(5)だけだとまずいのでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • htaccess リダイレクトの記述方法

    「wwwなし http://www.abc.net/」から 「wwwありに統一 sslありのhttps://www.abc.net/」にリダイレクトしたいのですが、以下の記述で合っていますでしょうか。よろしくお願いします。 Options +FollowSymLinks RewriteEngine on RewriteCond %{HTTP_HOST} ^abc.net RewriteRule ^(.*)$ http://www.abc.net/$1 [R=301,L] RewriteEngine on RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

    • ベストアンサー
    • HTML
  • .htaccessの意味を教えてください。

    制作会社が設定した、下記.htaccess の意味を教えて頂けないでしょうか? RewriteEngine On <IfModule mod_rewrite.c> RewriteCond %{REQUEST_URI} /hotel/all/ RewriteCond %{REQUEST_URI} !/stay/hotel/all/ RewriteCond %{REQUEST_URI} !/sp/stay/ RewriteCond %{HTTP_USER_AGENT} (iPod|iPhone|Android.+Mobile|Windows\ Phone) [OR] RewriteCond %{HTTP_USER_AGENT} (\ N-08D\ |\ N-06D\ |\ SC-01C\ |\ SC-02D\ |\ SH-06F\ |\ SH-08E\ |\ SHT22\ |\ SHT21\ |\ SMT-i9100\ |\ SM-T530\ |\ Nexus\ 7\ ) RewriteRule ^(.*)$ /sp/stay/all.html [R,L] RewriteBase / RewriteCond %{REQUEST_URI} /stay/hotel/all/ RewriteCond %{REQUEST_URI} !/sp/stay/ RewriteCond %{HTTP_USER_AGENT} (iPod|iPhone|Android.+Mobile|Windows\ Phone) [OR] RewriteCond %{HTTP_USER_AGENT} (\ N-08D\ |\ N-06D\ |\ SC-01C\ |\ SC-02D\ |\ SH-06F\ |\ SH-08E\ |\ SHT22\ |\ SHT21\ |\ SMT-i9100\ |\ SM-T530\ |\ Nexus\ 7\ ) RewriteRule ^(.*)$ /sp/stay/all.html [R,L] RewriteBase / RewriteCond %{REQUEST_URI} /hotel/all/ RewriteCond %{REQUEST_URI} !/stay/hotel/all/ RewriteCond %{REQUEST_URI} !/stay/hotel/dream/ RewriteCond %{HTTP_USER_AGENT} !(iPod|iPhone|Android.+Mobile|Windows\ Phone) RewriteCond %{HTTP_USER_AGENT} !(\ N-08D\ |\ N-06D\ |\ SC-01C\ |\ SC-02D\ |\ SH-06F\ |\ SH-08E\ |\ SHT22\ |\ SHT21\ |\ SMT-i9100\ |\ SM-T530\ |\ Nexus\ 7\ ) RewriteRule ^(.*)$ /stay/hotel/all/index.php [R,L] RewriteBase / RewriteCond %{REQUEST_URI} !/sp/ RewriteCond %{HTTP_USER_AGENT} (iPod|iPhone|Android.+Mobile|Windows\ Phone) [OR] RewriteCond %{HTTP_USER_AGENT} (\ N-08D\ |\ N-06D\ |\ SC-01C\ |\ SC-02D\ |\ SH-06F\ |\ SH-08E\ |\ SHT22\ |\ SHT21\ |\ SMT-i9100\ |\ SM-T530\ |\ Nexus\ 7\ ) RewriteRule ^(.*)$ sp/$1 [R,L] RewriteBase / RewriteCond %{REQUEST_URI} /sp/ RewriteCond %{HTTP_USER_AGENT} !(iPod|iPhone|Android.+Mobile|Windows\ Phone) RewriteCond %{HTTP_USER_AGENT} !(\ N-08D\ |\ N-06D\ |\ SC-01C\ |\ SC-02D\ |\ SH-06F\ |\ SH-08E\ |\ SHT22\ |\ SHT21\ |\ SMT-i9100\ |\ SM-T530\ |\ Nexus\ 7\ ) RewriteRule ^sp/(.*)$ $1 [R,L] RewriteBase / </IfModule> <IfModule mod_rewrite.c> RewriteCond %{HTTP_USER_AGENT} ^(DoCoMo|KDDI|DDIPOKET|UP\.Browser|J-PHONE|Vodafone|SoftBank) RewriteRule ^$ /m/ [R,L] </IfModule>

  • リダイレクトのhtaccessを置くと403エラー

    perlで書いたCGIファイルがあるのですが、スマホ用のリダイレクトhtaccessファイルをトップディレクトリに置いた所、CGIのページが403エラーになってしまいました。 .htaccessファイルを外すと正常に表示するので、原因は.htaccessなのですが、理由が思い当たりません。 CGIのソースは出せないですが、お問い合せフォーム用のCGIです。 何かお気づきの点がありましたら助言お願い致します。 ● .htaccess(トップディレクトリに設置) <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{REQUEST_URI} !/sp/ RewriteCond %{HTTP_USER_AGENT} (iPhone|Android.*Mobile|Windows.*Phone) RewriteRule ^(.*)$ sp/$1 [R] RewriteBase / RewriteCond %{REQUEST_URI} /sp/ RewriteCond %{HTTP_USER_AGENT} !(iPhone|Android.*Mobile|Windows.*Phone) RewriteRule ^sp/(.*)$ $1 [R] RewriteBase / </IfModule> ● ディレクトリ構造 /index.html・・・トップページ /.htaccess・・・上記内容 /contact/all/index.cgi・・・403エラーになるCGI /contact/all/.htaccess・・・「Options ExecCGI」のみ記述 /sp/・・・スマホ用のリダイレクト先ディレクトリ(以下略)

  • .htaccess の書き方

    以下の .htaccess では、http://hoge.jp への携帯からのアクセスを http://hoge.jp/mobile ディレクトリへ転送させていますが、これを、 http://m.hoge.jp へ転送するには、どう記述を変えれば良いのでしょうか? ちなみに、使用予定のレンタルサーバでは、サブドメインつきのリクエストで 所定のディレクトリへアクセスさせるには、自分で .htaccess を書く必要が あるとのことです。(設定画面で設定できません) PC・携帯からのhttp://hoge.jp へのアクセスを、それぞれ PC: http://www.hoge.jp (/www/) 携帯: http://m.hoge.jp (/m/) という具合に振分転送させたいのですが・・・。 -------------------------------------- #携帯振り分け Options +FollowSymLinks RewriteEngine on RewriteBase / RewriteCond %{REQUEST_URI} !^/mobile RewriteCond %{HTTP_USER_AGENT} DoCoMo [NC,OR] RewriteCond %{HTTP_USER_AGENT} (J-PHONE|Vodafone|Softbank|MOT-) [NC,OR] RewriteCond %{HTTP_USER_AGENT} (KDDI|UP\.Browser) [NC,OR] RewriteCond %{HTTP_USER_AGENT} (PDXGW|DDIPOKET|WILLCOM) [NC,OR] RewriteCond %{HTTP_USER_AGENT} ASTEL [NC,OR] RewriteCond %{HTTP_USER_AGENT} L-mode [NC] RewriteRule ^(.*)$ /mobile/$1 [R,L] #「www」ありに統一 RewriteCond %{HTTP_HOST} ^(hoge\.jp)(:80)? [NC] RewriteRule ^(.*)$ http://www.hoge.jp/$1 [R=301,L]

  • httpからhttpsへのリダイレクト方法

    すいません、よくわかりませんので教えて下さい。.htaccessに記述してhttpにアクセス来たものをhttpsへリダイレクトしたいです。 今の状況は下記です。 AddHandler application/x-httpd-php53 .php RewriteEngine On # Main RewriteRule for multidomain. RewriteCond %{HTTP_HOST} ^(sanetsu.com) RewriteCond %{REQUEST_URI} !^/(sanetsu.com)/ RewriteRule ^(.*)$ http://www.sanetsu.com/$1 [L] # Main RewriteRule for multidomain. RewriteCond %{HTTP_HOST} ^(www.burikama.com) RewriteCond %{REQUEST_URI} !^/(www.burikama.com)/ RewriteRule ^(.*)$ /%{HTTP_HOST}/$1/ [L] # Main RewriteRule for multidomain. RewriteCond %{HTTP_HOST} ^(burikama.com) RewriteCond %{REQUEST_URI} !^/(burikama.com)/ RewriteRule ^(.*)$ http://www.burikama.com/$1 [L] # BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress すいません、上記の記述をどのように変更したらhttpsへリダイレクトさせることができますでしょうか?前任のweb担当の方と連絡が付かないので教えていただけたらありがたいです。 宜しくお願い致します。

    • ベストアンサー
    • HTML
  • htaccessでhttp⇒https topのみ

    htaccessを使って、homeのみhttp⇒httpsにしたいのですが、ご存知の方いますか。 (例) http://www.abc.com ⇒ https://www.abc.com 下記のような他のページは転送を行う必要はありません。 不要(http://www.abc.com/dfg.html ⇒ https://www.abc.com/dfg.html) 下記に記載したものは、すべて転送されてしまいます。 RewriteEngine on RewriteCond %{SERVER_PORT} !^443$ RewriteRule (.*)?$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R]

  • htaccessによる端末ごとによる振り分け

    htaccessによる振り分けに関しまして、 PC:/ スマートフォン:/sp/ モバイル:/m/ 端末ごとに振り分けを行いたいです。 ■PC では、/sp/フォルダ、/m/フォルダにアクセスしても、 URLから、各フォルダが除かれ、PCファイルが読み込まれます。 ■スマートフォンでは、/sp/フォルダが入っていないときは、 問題なく、URLに/sp/が加わり、スマートフォンサイトが読み込まれます。 ですが、http://○○.com/m/index.php等でアクセスを行うと、 http://○○.com/sp/m/index.phpのようなURLになります。 ※これは、http://○○.com/sp/index.phpへアクセスしてほしいです。 ■モバイルでは、/m/フォルダが入っていないときは、 問題なく、URLに/m/が加わり、モバイルサイトが読み込まれます。 ですが、http://○○.com/sp/index.php等でアクセスを行うと、 http://○○.com/m/sp/index.phpのようなURLになります。 ※これは、http://○○.com/m/index.phpへアクセスしてほしいです。 ■モバイル・スマートフォンのリダイレクトに関しまして、 改善するためのご意見をお願い致します。 よろしくお願い致します。 ■htaccessの中身です。 RewriteEngine on #スマートフォン RewriteCond %{REQUEST_URI} !/sp/ RewriteCond %{HTTP_USER_AGENT} (iPod|iPhone|iPad|Android|Windows\ Phone) RewriteRule ^(.*)$ sp/$1 [R] #RewriteRule ^(.*)$ sp/ [R] RewriteBase / #モバイル RewriteCond %{REQUEST_URI} !/m/ RewriteCond %{HTTP_USER_AGENT} (DoCoMo|KDDI|DDIPOKET|UP\.Browser|J-PHONE|Vodafone|SoftBank) RewriteRule ^(.*)$ m/$1 [R] #RewriteRule ^(.*)$ m/ [R] RewriteBase / #PC RewriteCond %{REQUEST_URI} /sp/ RewriteCond %{HTTP_USER_AGENT} !(iPod|iPhone|iPad|Android|Windows\ Phone) RewriteRule ^sp/(.*)$ $1 [R] #RewriteRule ^sp/(.*)$ / [R] RewriteBase / #PC RewriteCond %{REQUEST_URI} /m/ RewriteCond %{HTTP_USER_AGENT} !(DoCoMo|KDDI|DDIPOKET|UP\.Browser|J-PHONE|Vodafone|SoftBank) RewriteRule ^m/(.*)$ $1 [R] #RewriteRule ^m/(.*)$ / [R] RewriteBase /

  • htaccess wwwがあるのとないので同じページを表示させることはできますか?

    現在●●.comと■■.comの2つのアドレスを使用していて、 ■■.comをマルチドメインにするため下記をhtaccessに記載しています。 www. ■■.comを追加子ドメインにして ■■.comと同じページを見られるようにするにはどうすればよいでしょうか? # Enable RewriteEngine. RewriteEngine On # Main RewriteRule for multidomain. RewriteCond %{HTTP_HOST} (■■.com) RewriteCond %{REQUEST_URI} !^/(■■.com)/ RewriteRule ^(.*)$ /%{HTTP_HOST}/$1/ [L]

    • ベストアンサー
    • HTML
  • htaccess mod_rewriteのドット

    ワードプレスをインストールし.htaccessをのぞいてみると以下のようにあります。 RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] 一番下のRewriteRuleは%{REQUEST_FILENAME}がルートディレクトリ直下にあるファイルやディレクトリでなければ、RewriteRule . /index.php [L]を実行するという理解でいいでしょうか? それとRewriteRule . /index.php [L]のドットはどういう意味でしょうか? ドットは一文字ということだとおもいますが、では、mysite.co.jp/kはmysite.co.jp/indx.phpに修正される?ということでしょうか?現状では、mysite.co,jp以下に適当な文字列を入力してmysite.co.jp/dgfdhgfghfdhなどとしてもそのURLのままサイトが表示されてしまいます。記事の部分は404NotFoundなのですが。。 情報はあるのですが、調べても混乱してしまうのでご存知でしたらよろしくお願いいたします。 Apache wordpress

    • 締切済み
    • PHP

専門家に質問してみよう