• 締切済み

.htaccess RedirectMatchについて

.htaccessでRedirectMatchを使って、   hoge.php?a=** → hoge.php?b=** というURLに飛ばしたいのですが、正規表現の書き方がよくわかりません。 正規表現についての説明サイトなども見たのですが、よく判らず・・・。 どのように書けばいいのでしょうか?

  • HTML
  • 回答数1
  • ありがとう数0

みんなの回答

  • ksk_1975
  • ベストアンサー率0% (0/0)
回答No.1

以下のようにしてみてはいかがでしょうか? 変数$1は正規表現でマッチした中身を取り出すのに使用されます。 hoge.php?a=(.*) → hoge.php?b=$1 [例] httpでのアクセスをすべてhttpsに飛ばす。最初の\/はドキュメントルートからのパスになります。 RedirectMatch \/(.*) https://www.example.com/$1

amane-port
質問者

補足

アドバイスありがとうございました。 しかし、私の書き方が悪いのかうまく飛んでくれませんでした。 追加情報ですが、hoge.phpはサブドメインで使っているんです。 http://subdir.mydomain.net/ にアクセスすると http://mydomain.net/subdir/ の中が表示されるようになっています。 この/subdir/の中にhoge.phpがあります。 また、.htaccess関係のサイトで「アクセスされたファイルが実際にあれば転送されるが、ない場合は転送されない」と書いてありました。 前にはあった変数$aを$bに変更してPHPを修正したので、今現在hoge.phpの中に$aに対する処理が何も書かれていません。 これは何か関係がありますか?

関連するQ&A

  • htaccessの(.*)について

    書き込みさせていただきます。 htaccessの書き方を色々なサイトを参考にして勉強していましたが RedirectMatch permanent ^/aaa/(.*) /aaa/bbb/ RedirectMatch permanent ^/aaa/$ /aaa/bbb/ 上記の違いがよく分かりませんでした。 (.*)は一体何を表しているのでしょうか? 下記サイトを読みまして http://www.mnet.ne.jp/~nakama/ (.*)は/aaa/がつくものはできるだけリダイレクトの 対象になるいうことでしょうか? 例:/aaa/a.htmlとか/aaa/b.phpとか、もしアクセスがあれば /aaa/bbb/になる。。ということなんでしょうか… しかし… RewriteRule ^ccc/.*$ /ddd/ [R] というのもありまして、括弧のついていない.*もあります? 括弧がついていなくても/ccc/がつくものはできるだけ対象になると 考えても良いのでしょうか? 括弧はグループ化のようですが… 括弧が付く意味がよく分かりません。 自分ではよく分からなくなってきてしまい… よろしければアドバイスをお願い致します。

  • htaccessのリダイレクトについて

    html、phpなどの拡張子付きリクエストを、末尾がスラッシュの URLにリダイレクトしたいのですが、方法をご教示ください。 例えば、 http://www.hoge.com/hoge/ へのリクエストを、異なるサーバーの http://www.hoge2.com/hoge/ にリダイレクトしたいと考えており、以下のように記述しています。 #.htaccessの記述 Redirect permanent /hoge/ http://www.hoge2.com/hoge/ しかし、 /hoge/hoge.php のリクエストがあった場合、以下のようにドキュメント名を付加される ので困っています。 http://www.hoge2.com/hoge/hoge.php 宜しくお願いします。

    • ベストアンサー
    • PHP
  • .htaccessでサイトの引っ越し

    .htaccessでサイトの引っ越し サーバーとドメインの変更がり引っ越しをします。 調べてみたところ.htaccessでリダイレクトするべきとあったのですが書き方について質問です。 サイトのURLをhoge.co.jpからexsample.co.jpに変更します。 この場合の書き方ですが下記の一行でいいのでしょうか? RedirectMatch 301.* http://www.exsample.co.jp/ しかし上記の場合どんなURLであっても全てを新しいURLにリダイレクトしますよね? 階層やファイル名は全く同じになるので可能であれば実現したい事は・・・ ・旧ドメイン/aaa.htmlにアクセスがあれば新ドメイン/aaa.htmlにリダイレクト ・旧ドメイン/bbb.htmlにアクセスがあれば新ドメイン/bbb.htmlにリダイレクト ・旧ドメイン/ccc.htmlにアクセスがあれば新ドメイン/ccc.htmlにリダイレクト と全てをトップページにリダイレクトするよりはそれぞれのページにリダイレクトしてやる方が親切かと思ったのですがどのように書けばいいでしょうか?

    • ベストアンサー
    • HTML
  • .htaccessを使いエラーが起きたら飛ばす

    Apacheで.htaccessを使いアクセス制限をしようとしています。 そして403エラーが起きたら指定のファイルにリダイレクトするというのを試みているのですがうまくいきせん。 問題点を絞るべくなるべく簡単にしてみました。 a.phpファイル (http://xxx.yyy.co.jp/ に存在します) <?php print("a"); error_log("a"); ?> b.phpファイル (a.phpと同様にhttp://xxx.yyy.co.jp/ に存在します) <?php print("b"); error_log("b"); ?> .htaccessファイル ErrorDocument 403 http://xxx.yyy.co.jp/b.php deny from all <Files ~ "\.(html|php)$"> allow from all </Files> この.htaccessの意図は拡張子がhtmlとphpのファイルだけにアクセスを許可します。 そしてそれ以外でアクセスしてきて403エラー(forbidden)が出た場合b.phpにリダイレクトしようとしています。(話を簡単にするため他のエラーについては省略します) 問題が出る流れ 1:まずブラウザでhttp://xxx.yyy.co.jp/a.phpにアクセスします。 2:なぜか ErrorDocument 403 に引っかかり http://xxx.yyy.co.jp/b.php に飛んでしまいます。 もちろんこのとき http://xxx.yyy.co.jp/ に a.php はちゃんと存在しています。 よって「ErrorDocument 403 http://xxx.yyy.co.jp/b.php」をまるごと.htaccessから削除してもう一度アクセスしても当然403エラーは出ません。 ちなみに本当にエラーだった場合の処理はうまくいっていて、存在しないファイルで例えば下記のようなURLでアクセスをした場合は正しく http://xxx.yyy.co.jp/b.php に飛びます。 http://xxx.yyy.co.jp/a.ccc 問題は何故エラーでもないのにErrorDocument 403で飛んでしまうのかです。 やはり.htaccessの設定の仕方が悪いのでしょうか。

    • ベストアンサー
    • PHP
  • .htaccessでの301リダイレクトについて

    .htaccessでの301リダイレクトについて教えてください。 1つのサイトを閉鎖し新しいサイトと一緒にしたいと思っています。 .htaccessで301リダイレクトを行うと思い 下記のような記述を行いましたが上の4つはリダイレクトされますが 下の2つがリダイレクトされません。 色々と試してはいますがどう直せばいいのか分からず困っています。 RewriteRule ^whatis.php$ https://hoge.jp/whatis.php [R=301,L] RewriteRule ^help/$ https://hoge.jp/faq.php [R=301,L] RewriteRule ^category/$ https://hoge.jp/category.php [R=301,L] RewriteRule ^inquiry/$ https://hoge.jp/inquiry/ [R=301,L] RewriteRule ^category/details.php?category=aaaaa$ https://hoge.jp/category/?category=aaaaa [R=301,L] RewriteRule ^category2/?category=aaaaa$ https://hoge.jp/category/search.php?category=aaaaa [R=301,L] よろしくお願い致します。

  • htaccessのリダイレクトがループしてしまう

    http://hoge.com/ で運用しているものを http://hoge.com/foo/ のサブディレクトリに移動させようとしています。 .htaccessに --------------- Redirect permanent / http://hoge.com/foo/ --------------- と記述して http://hoge.com/ にアクセスしたら http://hoge.com/foo/foo/foo/foo/... とループしたような状態になってしまいました。 --------------- RedirectMatch 301 ^/$ http://hoge.com/foo/ --------------- だと http://hoge.com/ にアクセスした時は意図した動作になるのですが http://hoge.com/content1.html は転送されてくれません。 どのように記述したらいいでしょうか? サーバーはApacheを使用しています。

  • .htaccessについて

    サーバーでのディレクトリ構造が以下のようになっています。 /home  └ source     └ sample.php sample.phpはURLでは「http://www.hoge.com/source/sample.php」です。 このsample.phpは他のphpやjavascriptから呼び出されるファイルなのでユーザーが直接アクセスできなくしたいです。 そこでsourceフォルダに.htaccessを設置しましたが他のphpやjavascriptからも呼び出しできなくなってしまいました。 ------------------ order deny,allow deny from all allow from hoge.com ------------------ どのようにすればユーザーからは直接アクセスできないようにし、他のphpやjavascriptからのみ呼び出しできるようになるのでしょうか? javascriptからも呼び出す必要があるためこのphpファイルをhomeより上位には置けません。 どうぞよろしくお願い致します。

    • ベストアンサー
    • HTML
  • 初.htaccess設定。答え合わせお願いします

    趣味でWEBサイトを作って公開しています。 サイトを作り直したのでアップしたいのですが、.htaccessで転送設定したほうがよいと知りました。 恥ずかしながら旧サイトで何もしておらず、URLの正規化など転送以外にしたほうがいい設定も合わせてやってみたいです。 これでアップしていいか、教えてくださる方おられましたらご指導お願いしたいです。 【やりたいこと】 ・URL正規化 ・各旧ページから各新ページへの転送 ・TOPのindexをURLに表示しない ※使用しているサーバはロリポップです。 【作成した.htaccess】---------------------- #www無しのURLに統一 RewriteEngine On RewriteCond %{HTTP_HOST} ^www\.サイトURL\.com RewriteRule ^(.*) http://サイトURL.com/$1 [R=301,L] #各ページ旧URLから新URLへの転送(中間にあるディレクトリをなくした) RewriteEngine on RewriteRule ^http://サイトURL.com/旧ディレクトリA/旧ページ1.html$ http://サイトURL.com/新ページa.html [R=301,L] RewriteRule ^http://サイトURL.com/旧ディレクトリA/旧ページ2.html$ http://サイトURL.com/新ページb.html [R=301,L] RewriteRule ^http://サイトURL.com/旧ディレクトリB/旧ページ1.html$ http://サイトURL.com/新ページc.html [R=301,L] RewriteRule ^http://サイトURL.com/旧ディレクトリB/旧ページ2.html$ http://サイトURL.com/新ページd.html [R=301,L] ・・・各ページ分用意 #index.php無しのURLに統一 RewriteEngine On RewriteCond %{THE_REQUEST} ^.*/index.php RewriteRule ^(.*)index.php$ http://サイトURL.com/$1 [R=301,L] 【作成したhtaccessここまで】---------------------- <Q1>「RewriteEngine On」は、冒頭に1度書けば良いのでしょうか?それとも命令1つごとに必要なのでしょうか。 <Q2>3番め(#indexなしにする)について、 旧ページはindex.htmlですが新ページはindex.phpになりました。 その場合の書き方もこれで合っていますか? 2番めの転送設定でindex.html→index.phpにしておけばこれでいいのかなと思っているのですが・・・ <Q3>1番目~3番目の各命令を書く順序は合っていますか? 上から順に読み込むのか、そもそもどの順で書いても関係ないのでしょうか。 全くの初心者なので質問の仕方もわかりにくいかと思いますが、 教えてくださる方いらっしゃいましたらよろしくお願いいたします。

    • ベストアンサー
    • HTML
  • .htaccessでのリダイレクト分岐方法

    お世話になります。 .htaccessに以下の記述をしてリダイレクトしているのですが、 $1の値によってリダイレクトさせたくない場合、 どのように記述すればよいのでしょうか。 RedirectMatch permanent /abc/(.*)\.jpg$ http://hoge.com/data/$1.jpg $1の値は数字で1000以下の場合のみ先頭に0がつきます。 (500の場合は0500など) これをたとえば$1の値が0300以上(1000以下なので先頭に0がついた数値になります) ならリダイレクトさせたくないと言った事は可能でしょうか。 ・/abc/(.*)\.jpgの部分から$1の値を取得する ・取得した値で先頭に0がつく場合はまず0を排除 if($1 <= 300) { RedirectMatch permanent /abc/(.*)\.jpg$ http://hoge.com/data/$1.jpg } みたいな感じになると思うのですが、.htaccessでの記述方法がわかりません。 お手数をおかけしますがご教授いただけますと幸いです。

  • .htaccessのRewriteRuleの記述

    .htaccessのRewriteRuleの記述方法について質問です。 以下のようなURL移転があったので、RewriteRuleを記述したいのですが、どのように記述すればよろしいでしょうか? 【旧URL】 http://example.com/hoge/hoge.php?id=数字 【新URL】 http://example.com/foo.php?var=1&id=数字 ※数字は対応しています(同じページは同じ数字が入ります)。 なお、私なりにググってみて、以下のように記述したのですが、動きませんでした。 Options +FollowSymLinks RewriteEngine on RewriteRule /hoge/hoge\.php\?(.+) http://example.com/foo.php?var=1&$1 [R=301,L] また、上記のような場合は、そもそもRewriteRuleは適切ではないということであれば、より良い手段をご教示いただきたくお願い申し上げます。