- ベストアンサー
[Apache] サブディレクトリに.htaccessをおいた場合
Apacheの.htaccessについての質問です。 webにて可能な限り検索してみたのですが、該当する記事がありませんでした。 よろしくお願いします。 【環境】 ・windows xp sp2 ・xampp(apache 2) 【httpd.confの設定】 DocumentRoot "J:\foo" <Directory "J:\foo"> Options Indexes FollowSymLinks Includes ExecCGI AllowOverride All Order allow,deny Allow from all </Directory> ※)Jドライブは外付けHDDです。 【現象】 1.DocumentRootの「J:\foo」に.htaccessを設置した場合 1)http://localhost/でアクセス →機能します 2)http://localhost/ver/でアクセス →機能します ※)DocumentRootに.htaccessを設置した場合、通常の動作になる。 (サブディレクトリにもDocumentRootに設置した.htaccessの設定が有効になる) 2.「J:\foo\ver」に.htaccessを設置した場合(DocumentRootの.htaccessは除去) 1)http://localhost/ver/でアクセス →機能しません 「2」を機能させたいのですが、どのような設定が必要なのでしょうか。 尚、念の為.htaccessの内容を以下に記します。 RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ /index.html [L,QSA] この.htaccessについてはレンタルサーバ上で動作確認済みである為、おそらくはhttpd.confの設定かと考えています。 または外部HDDにDocumentRootを設定しているのが問題かと・・・。 説明不足な点がございましたらご指摘頂けると幸いです。 以上、どうぞよろしくお願い致します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
xamppは、昔入れてほったらかしてある環境なので、ざっと見た限りですが、httpd.confファイルに Global Evironment 'Main' Server の2つのセクションがありますが、整合性は大丈夫でしょうか? (もし、最近のには/ダウンロードされたバージョンには、無いよってことでしたら、無視して下さい。)
その他の回答 (2)
- Pochi09
- ベストアンサー率75% (42/56)
問題解決の切り分け提案ですが、参考URLのApacheのサイトにあるように、/varに一旦動作しない .htaccess を置いてみてエラーが出るか(=/var で問題なく .htaccess が動作する) を確認してみては如何でしょうか?
お礼
ご回答ありがとうございます。 1./var(DocumentRootでは無い、いかなるサブディレクトリ)にはどんな内容の.htaccessを置いても機能しません。 →意図的なエラーを含む.htaccessを置いてもエラーを吐きません。 2.httpd.confのDocumentRootセクションにはAllowOverride Allと設定しています。 →マニュアル通りに書いたつもりなのですが・・・ 3.この.htaccessは別環境のサブディレクトリでは意図通りに機能します。 →ただし、その別環境のhttpd.confは参照不可 以上のことから.htaccessの問題ではなく、httpd.confに問題があると考えています。 もしくは上記にも書きました通り、外部HDDにDocumentRootを設定しているので、アクセス権限絡みかなとも思い権限をALLフリーにしてみたりと試してみてはいるのですが・・・ 重ねてお礼申し上げます。 ご協力ありがとうございますm(_ _)m
"J:\foo" を "J:/foo" でどうでしょう?
お礼
ご回答ありがとうございましたm(_ _)m ご指摘のパスに訂正してみましたが駄目でした。
お礼
ご回答ありがとうございます。 自己解決しましたのでご報告させて頂きます。 原因は.htaccessにRewriteBaseを設定していなかったことでした。 RewriteBase /foo を追加することで解決いたしました。 今回の.htaccessの設定では、存在しないリクエストを全てhttp://localhost/index.htmlにRewriteしようというものでした。 1.RewriteBaseを書かなかった場合 →http://localhost/ver/aaaaa (存在しないURL) 結果:404となる。(http://localhost/foo/index.htmlにrewriteしてしまう) 2.RewriteBaseを書いた場合 →http://localhost/ver/aaaaa (存在しないURL) 結果:http://localhost/index.htmlにrewriteされる RewriteBaseでベースとなるURL(今回の場合は/foo)を教えてあげないといけないとのことでした。 皆さん、お手伝い頂きありがとうございました。 改めてお礼申し上げますm(_ _)m