質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.61%

  • .htaccess

    375questions

    Apacheウェブサーバーにおいて、ディレクトリ単位で設置及び設定を行う設定ファイルを指します。

.htaccessでトップ以外のアクセスをトップにリダイレクトする方法

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 2,816

okame

score 50

前提・実現したいこと

Apacheモジュールを利用して指定のディレクトリ以下のアクセスを
全てトップページにリダイレクトさせたく、そのテストをxampp上で行っています。

発生している問題・エラーメッセージ

トップページのパス)
/Applications/XAMPP/xamppfiles/htdocs/mvctest/
ここにリダイレクトさせたいのですが、現状は...

現状)
localhost/xampp/
ここにリダイレクトされています。

ソースコード

// .htaccessの記述
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /Applications/XAMPP/xamppfiles/htdocs/mvctest/
RewriteCond %{REQUEST_URI} !^/index.php$
RewriteRule ^(.*)$ /index.php [L,R]
</IfModule>

補足情報(言語/FW/ツール等のバージョンなど)

XAMPPのバージョンは1.8.3-5、
mod_rewriteの初期設定(httpd.conf)は実施済です。


解決方法または試した方がよいことについてご教示いただければ幸いです。
宜しくお願いします。
    
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • takotakot

    2015/06/15 09:13

    よくある質問事例です。他の .htaccess の質問をご覧になると、ご自身で分かることがあるかもしれません。 http://localhost/ がどこを指すようになっているか、質問に追記(編集)する形でご回答頂ければと思います。

    キャンセル

  • takotakot

    2015/06/15 09:13

    正確には、http://localhost/index.php ですね。失礼しました。

    キャンセル

  • okame

    2015/06/15 09:16

    情報が不足しており失礼いたしました。 質問を追記します。

    キャンセル

回答 2

checkベストアンサー

+1

/Applications/XAMPP/xamppfiles/htdocs/mvctest/

このパスは、URLのパスではなく、ホストの実際のパスではないでしょうか?
(xampp 使ったことはないですが、DocumentRoot が / などということは無いと思うので)

RewriteBase は、ホストの実際のパスを指定するのではなく、URL のパスを指定します。

なので、例えば以下のように指定するはずです。

RewriteBase /

もしくは次のようにでしょうか?

RewriteBase /mvctest

具体的なディレクトリ構成がわからないので、どちらが正しいかは回答できません。

また、そもそも RewriteBase は、そのディレクトリ(.htaccess を置いているディレクトリ)が、どのような URL (のパス)でアクセスされるのかを Apache が判断できないような状況(Alias とかシンボリックリンクとか)で、Apache にそれを教えてあげるために使うものなので、.htaccess を置いているディレクトリが DocumentRoot の中のディレクトリにあるなら、指定する必要はありません(Apache が RewriteBase を自動的に判断できるためです)。


.htaccess は下記に保存してください。

/Applications/XAMPP/xamppfiles/htdocs/mvctest/

.htaccess の内容は以下のようにしてください。
RewriteCond を使う必要はありません。
RewriteBase もそのディレクトリ構成なら必要ないはずです。

RewriteEngine on
RewriteBase /mvctest/
RewriteRule ^index\.php$ - [L]
RewriteRule .* index.php [L,R]

もし、本当に localhost/xampp/ というパスにリダイレクトされるのであれば、ブラウザのキャッシュをクリアしてみてください。
(Permanent なリダイレクトをブラウザが覚えているのかもしれません)

余談ですが、これって index.php がフロントコントローラーなMVCなのではないのでしょうか?
もしそうなら、いわゆるリダイレクトをするのはおかしいような気がしますけど。


主要なフレームワークの大半が mod_rewrite でフロントに振り分けているので、そういうのからパクってくると良いですよ。

CakePHP とか超シンプルでわかりやすいです。

https://github.com/cakephp/app/blob/master/webroot/.htaccess

Symfony は複雑すぎて参考になる気がしません・・・

https://github.com/symfony/symfony-standard/blob/2.8/web/.htaccess


投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/06/15 11:30

    ご回答ありがとうございます。

    > このパスは、URLのパスではなく、ホストの実際のパスではないでしょうか?

    仰る通りです。XAMPPは例えば、
    ホストのパス :/Applications/XAMPP/xamppfiles/htdocs/index.php
    URLのパス  :http://localhost/index.php
    となります。

    > RewriteBase は、ホストの実際のパスを指定するのではなく、URL のパスを指定します。
    > なので、例えば以下のように指定するはずです。
    > RewriteBase /
    > もしくは次のようにでしょうか?
    > RewriteBase /mvctest

    私も同様の認識だったため、最初は上記の記述で試したのですが、
    それでもうまくゆきませんでした。

    > 具体的なディレクトリ構成がわからないので、どちらが正しいかは回答できません。

    ディレクトリ構成としては、
    /Applications
    /XAMPP
    /xamppfiles
    /htdocs
    /mvctest
    index.php
    /controllers
    baseController.php
    /その他のフォルダ...

    となっています。

    > また、そもそも RewriteBase は、...

    htdocs以下に、テストしたいサイトやページ毎にtest1やtest2にと言った風に
    ディレクトリを分けて設置しておりました。なので、今回はリダイレクトさせたいのは
    あくまでも指定したパス以下のみで、それ以外の同階層にあるディレクトリへのアクセスは
    リダイレクトさせたくないため、
    RewriteBaseでの指定を行っておりました。


    上記のような状態ですが、もし他に解決方法や試した方が良いことなどあれば
    改めてご教示いただければ幸いです。

    キャンセル

  • 2015/06/15 11:33

    ディレクトリ構成を書き直します。
    /Applications
    ----/XAMPP
    --------/xamppfiles
    ------------/htdocs
    ----------------/mvctest
    --------------------index.php
    --------------------/controllers
    ------------------------baseController.php
    --------------------/その他のフォルダ...

    キャンセル

  • 2015/06/15 11:48

    okame 様 .htaccess がどこにあるかも結構大事です。

    キャンセル

  • 2015/06/15 11:55

    /Applications/XAMPP/xamppfiles/htdocs

    がドキュメントルートになっていて、

    http://localhost/mvctest/ANYPATH

    のようなリクエストを、

    http://localhost/mvctest/index.php

    に、リダイレクトしたい、ということでしょうか?
    (質問の内容と若干矛盾している気もしますが、↑のコメントから推測するに)

    キャンセル

  • 2015/06/15 13:32

    takotakot様 度々のご指摘、不備をお詫びするとともに、感謝申し上げます!
    再度記載します。

    /Applications
    ----/XAMPP
    --------/xamppfiles
    ------------/htdocs
    ----------------/mvctest
    --------------------.htaccess
    --------------------index.php
    --------------------/controllers
    ------------------------baseController.php
    --------------------/その他のフォルダ...

    ngyuki様、コメントありがとうございます!
    おそらくngyuki様の仰っていただいている内容で相違ないのですが、
    わたくしが誤った捉え方をしないように念のため下記を記載します。

    http://localhost/mvctest/test/test.php
    のようなリクエストを、

    http://localhost/mvctest/index.php
    に、リダイレクトしたい、ということです。

    かつhttp://localhost以下にはディレクトリで分けた複数の別サイトが存在しているため、
    http://localhost/mvctest/以下にリクエストがあった時だけ
    そのルールを適用したいです。

    質問の仕方が適切でなく誤解を与えてしまったかもしれません。
    失礼致しました。

    キャンセル

  • 2015/06/15 13:54

    追記しました

    キャンセル

  • 2015/06/15 14:36

    ngyuki様
    解決しました!ありがとうございます!!m(_ _)m
    また質問の情報不足等でお手数をおかけし申し訳ありませんでした。

    .htaccessの、設置場所は合っていたので、ファイル内の記述をご教示頂いた内容、
    RewriteEngine on
    RewriteBase /mvctest/
    RewriteRule ^index\.php$ - [L]
    RewriteRule .* index.php [L,R]
    に書き換えましたら、正しくリダイレクトされました。

    今回の事象の原因は、RewriteCond及びRewriteRuleの
    記述内容が適切でなかったという認識でよろしいでしょうか?

    〜〜以下は余談の件です〜〜

    余談の件、仰る通りです。

    現在、フレームワーク利用方法習得のための前段階として、
    MVCフレームワークの基礎を独学で学んでおりました。

    その一環で、
    http://www.objective-php.net/mvc/dispatcher
    このサイトのこのページ他を参考にフレームワークの作成を行っておりました。

    このサイトでは、「apacheのリライト機能を使って
    全てのリクエストを共通のフロントPHPへ集中させ、
    そこからドメイン以降のパス名を元にリクエストの振り分けを行う」
    という方法をとっていた(というわたしの認識)ので、
    今回の様なリダイレクトを行いたかった次第です。

    キャンセル

  • 2015/06/15 15:17

    質問に書かれているものは RewriteBase と RewriteCond がおかしいです(RewriteRule もおかしいと言えばおかしいですが動作しなくなる類のものではないです)。

    ただ、localhost/xampp/ にリダイレクトされていた理由はわかりません。

    余談の件、「全てのリクエストを共通のフロントPHPへ集中させ」は、いわゆる普通のリダイレクトを行うという意味ではありません。

    フォワードとか内部リダイレクトとか言われる方法を使うのが普通です。
    具体的には RewriteRule の [L,R] の R が不要です。

    キャンセル

  • 2015/06/15 16:26

    ngyuki様
    たびたびのコメントありがとうございます。
    これを機にリライト機能を正確に使えるよう勉強しておきます。

    フォワード、覚えました。RewriteRuleのRを除いたら
    ブラウザのURLが変わらずにリダイレクトできました。重ねて感謝いたします。

    キャンセル

0

質問の内容が正確でないとしか思えないです。

現状)
localhost/xampp/
こにリダイレクトされています。 

xamppなどというディレクトリは、どこにもないので、それはあり得ない。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/06/15 13:23

    稚拙な質問で、回答しようと閲覧していただいた方に充分な情報もお伝えできず、
    本当に申し訳ありません。

    ...ただ、初心者を言い訳にするつもりは毛頭ないのですが、
    「あり得ない」という書き方をされてしまうと、もうここには質問できなくなってしまいます。実際にあり得ているので。

    ディレクトリというよりは、ブラウザのアドレス欄に
    「localhost/xampp/」と表示される、とお伝えした方が分かり易いでしょうか。

    時間はかかると思いますが、もっと質問の精度を上げられるよう日々精進して参ります。
    ご不快な想いを与えてしまい申し訳ありませんでした。

    キャンセル

  • 2015/06/15 13:35

    「ありえない」というのは、「他の情報が十分提示されていて、かつ正しければ」という前提の元です。
    ブラウザのアドレス欄が、「localhost/xampp/」 なのであれば、どこかにxamppというディレクトリがあるはずで、それがディレクトリ構成図に漏れていると言うことですね。

    もしくは、xamppというディレクトリが本当に存在しないと言うことであれば、別のディレクティブで、xamppを何か別の物にaliasかリライトしているか。その場合は、設定ファイルを全部見直した方が良いかと思います。

    キャンセル

  • 2015/06/15 13:36

    > ご不快な想い
    前々不快じゃないです。不快なら回答しない。

    キャンセル

  • 2015/06/15 14:05

    otn様
    > 前々不快じゃないです。不快なら回答しない。
    そうだったんですね!失礼しました。
    私自身が初心者、というより小心者で、回答者の方のコメントにおびえ過ぎておりました。
    今後はコメント頂いた内容を冷静に捉えて対応いたします。

    localhost/xampp/
    の件ですが、これまた後出しで恐縮ですが、ディレクトリ自体は存在します。

    /Applications/XAMPP/xamppfiles/htdocs/xampp/
    という、XAMPP上にデフォルトで存在するディレクトリです。

    ...と、ココまで書いて、過去にある設定をしたことを思い出しました。
    「存在しないディレクトリのリクエストがあったら●●にリダイレクトする」
    というような類いのことをしたような、しないような。。。

    それが原因ではと調べているのですが、調査に時間がかかりそうだったので、
    ここで一旦コメントをお返しします。

    キャンセル

  • 2015/06/15 14:46

    他の方の回答で本事象が解決したので、
    上記の件は関係がなかったようです。失礼致しました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    phpのこのコードをxamppで実行するには?

    このコードをxamppで実行するにはどうすればいいですか?ログインのコードです。 あと、ログイン画面のhtmlのコードがありませんが、どうすればいいですか? https://git

  • 解決済

    xamppよりphpの起動について

    xamppをインストール後 xamppのxampp-control.exeを起動し  apacheのところをstartして起動。  http://localhost/

  • 受付中

    至急!!助けてください!!ターミナル Mac

    デイレクトリ間を手入力で目的のファイルまで行きたいのですが、なぜかいけません。ファインダーからドラッグアンドドロップではいけるのですが。ちなみに前はできていました。 そしてX

  • 解決済

    サーバーからローカルに落としたphpのサイトのファイルがxamppで開けない

    先日、サーバー上で起動しているphpのファイルをローカルに落とし、xamppのhtdocs配下に加えて、 アパッチをstartにし、 localhost/ファイル名/ind

  • 解決済

    phpファイルがブラウザで表示されない

    お世話になります。 今xamppのhtdocsフォルダの中にphpファイルを置いているのですが、ブラウザできちんとした形で見ることが出来ません。 (正確に言うと、見ることが出来

  • 解決済

    XAMPPでいきなりPHPが表示されなくなった

    Xamppのローカル環境でphpを開発していたのですが、とつぜんphpを実行することができなくなりました! phpをダブルクリックするとphpファイルがダウンロードされるだけでp

  • 解決済

    xamppの初期画面が表示されません。

    xamppの初期画面が表示されません。 http://localhost/dashboard/ にアクセスすると500 Internal Server Errorが返ってきます。

  • 解決済

    PHPが実行されません

    前提・実現したいこと 前回の404・403エラーは解決しました(原因分からず) 404は解決したので後から発生した次のエラーについて聞きたいです。 発生している問題・エラ

同じタグがついた質問を見る

  • .htaccess

    375questions

    Apacheウェブサーバーにおいて、ディレクトリ単位で設置及び設定を行う設定ファイルを指します。