• ベストアンサー

[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を設定しているのが問題かと・・・。 説明不足な点がございましたらご指摘頂けると幸いです。 以上、どうぞよろしくお願い致します。

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

  • ベストアンサー
  • Pochi09
  • ベストアンサー率75% (42/56)
回答No.3

xamppは、昔入れてほったらかしてある環境なので、ざっと見た限りですが、httpd.confファイルに  Global Evironment  'Main' Server の2つのセクションがありますが、整合性は大丈夫でしょうか? (もし、最近のには/ダウンロードされたバージョンには、無いよってことでしたら、無視して下さい。)

noname#119012
質問者

お礼

ご回答ありがとうございます。 自己解決しましたのでご報告させて頂きます。 原因は.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

その他の回答 (2)

  • Pochi09
  • ベストアンサー率75% (42/56)
回答No.2

問題解決の切り分け提案ですが、参考URLのApacheのサイトにあるように、/varに一旦動作しない .htaccess を置いてみてエラーが出るか(=/var で問題なく .htaccess が動作する) を確認してみては如何でしょうか?

参考URL:
http://httpd.apache.org/docs/2.2/ja/howto/htaccess.html#troubleshoot
noname#119012
質問者

お礼

ご回答ありがとうございます。 1./var(DocumentRootでは無い、いかなるサブディレクトリ)にはどんな内容の.htaccessを置いても機能しません。   →意図的なエラーを含む.htaccessを置いてもエラーを吐きません。 2.httpd.confのDocumentRootセクションにはAllowOverride Allと設定しています。   →マニュアル通りに書いたつもりなのですが・・・ 3.この.htaccessは別環境のサブディレクトリでは意図通りに機能します。   →ただし、その別環境のhttpd.confは参照不可 以上のことから.htaccessの問題ではなく、httpd.confに問題があると考えています。 もしくは上記にも書きました通り、外部HDDにDocumentRootを設定しているので、アクセス権限絡みかなとも思い権限をALLフリーにしてみたりと試してみてはいるのですが・・・ 重ねてお礼申し上げます。 ご協力ありがとうございますm(_ _)m

noname#246547
noname#246547
回答No.1

"J:\foo" を "J:/foo" でどうでしょう?

noname#119012
質問者

お礼

ご回答ありがとうございましたm(_ _)m ご指摘のパスに訂正してみましたが駄目でした。

関連するQ&A