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

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

新規登録して質問してみよう
ただいま回答率
85.50%
.htaccess

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

Q&A

解決済

2回答

8002閲覧

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

okame

総合スコア54

.htaccess

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

0グッド

0クリップ

投稿2015/06/15 00:05

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

###発生している問題・エラーメッセージ
トップページのパス)
/Applications/XAMPP/xamppfiles/htdocs/mvctest/
ここにリダイレクトさせたいのですが、現状は...

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

###ソースコード

lang

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

###補足情報(言語/FW/ツール等のバージョンなど)
XAMPPのバージョンは1.8.3-5、
mod_rewriteの初期設定(httpd.conf)は実施済です。

解決方法または試した方がよいことについてご教示いただければ幸いです。
宜しくお願いします。

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takotakot

2015/06/15 00:13

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

2015/06/15 00:16

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

回答2

0

ベストアンサー

/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 02:04

編集2015/06/15 06:24
ngyuki

総合スコア4514

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

okame

2015/06/15 02: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での指定を行っておりました。 上記のような状態ですが、もし他に解決方法や試した方が良いことなどあれば 改めてご教示いただければ幸いです。
okame

2015/06/15 02:33

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

2015/06/15 02:48

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

2015/06/15 02:55

/Applications/XAMPP/xamppfiles/htdocs がドキュメントルートになっていて、 http://localhost/mvctest/ANYPATH のようなリクエストを、 http://localhost/mvctest/index.php に、リダイレクトしたい、ということでしょうか? (質問の内容と若干矛盾している気もしますが、↑のコメントから推測するに)
okame

2015/06/15 04: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/以下にリクエストがあった時だけ そのルールを適用したいです。 質問の仕方が適切でなく誤解を与えてしまったかもしれません。 失礼致しました。
ngyuki

2015/06/15 04:54

追記しました
okame

2015/06/15 05: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へ集中させ、 そこからドメイン以降のパス名を元にリクエストの振り分けを行う」 という方法をとっていた(というわたしの認識)ので、 今回の様なリダイレクトを行いたかった次第です。
ngyuki

2015/06/15 06:17

質問に書かれているものは RewriteBase と RewriteCond がおかしいです(RewriteRule もおかしいと言えばおかしいですが動作しなくなる類のものではないです)。 ただ、localhost/xampp/ にリダイレクトされていた理由はわかりません。 余談の件、「全てのリクエストを共通のフロントPHPへ集中させ」は、いわゆる普通のリダイレクトを行うという意味ではありません。 フォワードとか内部リダイレクトとか言われる方法を使うのが普通です。 具体的には RewriteRule の [L,R] の R が不要です。
okame

2015/06/15 07:26

ngyuki様 たびたびのコメントありがとうございます。 これを機にリライト機能を正確に使えるよう勉強しておきます。 フォワード、覚えました。RewriteRuleのRを除いたら ブラウザのURLが変わらずにリダイレクトできました。重ねて感謝いたします。
guest

0

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

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

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

投稿2015/06/15 04:11

otn

総合スコア84423

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

okame

2015/06/15 04:23

稚拙な質問で、回答しようと閲覧していただいた方に充分な情報もお伝えできず、 本当に申し訳ありません。 ...ただ、初心者を言い訳にするつもりは毛頭ないのですが、 「あり得ない」という書き方をされてしまうと、もうここには質問できなくなってしまいます。実際にあり得ているので。 ディレクトリというよりは、ブラウザのアドレス欄に 「localhost/xampp/」と表示される、とお伝えした方が分かり易いでしょうか。 時間はかかると思いますが、もっと質問の精度を上げられるよう日々精進して参ります。 ご不快な想いを与えてしまい申し訳ありませんでした。
otn

2015/06/15 04:35

「ありえない」というのは、「他の情報が十分提示されていて、かつ正しければ」という前提の元です。 ブラウザのアドレス欄が、「localhost/xampp/」 なのであれば、どこかにxamppというディレクトリがあるはずで、それがディレクトリ構成図に漏れていると言うことですね。 もしくは、xamppというディレクトリが本当に存在しないと言うことであれば、別のディレクティブで、xamppを何か別の物にaliasかリライトしているか。その場合は、設定ファイルを全部見直した方が良いかと思います。
otn

2015/06/15 04:36

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

2015/06/15 05:05

otn様 > 前々不快じゃないです。不快なら回答しない。 そうだったんですね!失礼しました。 私自身が初心者、というより小心者で、回答者の方のコメントにおびえ過ぎておりました。 今後はコメント頂いた内容を冷静に捉えて対応いたします。 localhost/xampp/ の件ですが、これまた後出しで恐縮ですが、ディレクトリ自体は存在します。 /Applications/XAMPP/xamppfiles/htdocs/xampp/ という、XAMPP上にデフォルトで存在するディレクトリです。 ...と、ココまで書いて、過去にある設定をしたことを思い出しました。 「存在しないディレクトリのリクエストがあったら●●にリダイレクトする」 というような類いのことをしたような、しないような。。。 それが原因ではと調べているのですが、調査に時間がかかりそうだったので、 ここで一旦コメントをお返しします。
okame

2015/06/15 05:46

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問