[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を設定しているのが問題かと・・・。
説明不足な点がございましたらご指摘頂けると幸いです。
以上、どうぞよろしくお願い致します。
投稿日時 - 2009-09-24 16:41:18
xamppは、昔入れてほったらかしてある環境なので、ざっと見た限りですが、httpd.confファイルに
Global Evironment
'Main' Server
の2つのセクションがありますが、整合性は大丈夫でしょうか?
(もし、最近のには/ダウンロードされたバージョンには、無いよってことでしたら、無視して下さい。)
投稿日時 - 2009-09-27 08:03:35
ご回答ありがとうございます。
自己解決しましたのでご報告させて頂きます。
原因は.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
投稿日時 - 2009-10-01 12:14:38
このQ&Aは役に立ちましたか?
0人が「このQ&Aが役に立った」と投票しています
回答(3)
問題解決の切り分け提案ですが、参考URLのApacheのサイトにあるように、/varに一旦動作しない .htaccess を置いてみてエラーが出るか(=/var で問題なく .htaccess が動作する) を確認してみては如何でしょうか?
参考URL:http://httpd.apache.org/docs/2.2/ja/howto/htaccess.html#troubleshoot
投稿日時 - 2009-09-26 09:46:30
ご回答ありがとうございます。
1./var(DocumentRootでは無い、いかなるサブディレクトリ)にはどんな内容の.htaccessを置いても機能しません。
→意図的なエラーを含む.htaccessを置いてもエラーを吐きません。
2.httpd.confのDocumentRootセクションにはAllowOverride Allと設定しています。
→マニュアル通りに書いたつもりなのですが・・・
3.この.htaccessは別環境のサブディレクトリでは意図通りに機能します。
→ただし、その別環境のhttpd.confは参照不可
以上のことから.htaccessの問題ではなく、httpd.confに問題があると考えています。
もしくは上記にも書きました通り、外部HDDにDocumentRootを設定しているので、アクセス権限絡みかなとも思い権限をALLフリーにしてみたりと試してみてはいるのですが・・・
重ねてお礼申し上げます。
ご協力ありがとうございますm(_ _)m
投稿日時 - 2009-09-26 23:08:26