- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:cakephpで特定ファイル表示(htaccess)
CakePHPで特定ファイル表示の設定方法
このQ&Aのポイント
- CakePHPにおいて、Googleの検索エンジン用のsitemap.xmlファイルを公開ディレクトリに置いた場合、そのファイルだけはmod_rewriteのルールから外して、普通にブラウザで見れる状態にする方法について教えてください。
- .htaccessファイルに以下の設定を追加することで、sitemap.xmlファイルをブラウザで見ることができます。 <IfModule mod_rewrite.c> RewriteRule ^sitemap.xml$ - [L] </IfModule> この設定を追加することで、サイトのトップページ以外を見ようとしても「Not Found」のエラーが表示されなくなります。
- CakePHPのindex.phpファイルと.htaccess、sitemap.xmlファイルは同じディレクトリに置いてありますので、上記の設定を追加することで、sitemap.xmlファイルをブラウザで確認することができます。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
どこも直す必要はありません。もとの.htaccessに戻してください。 RewriteCond %{REQUEST_FILENAME} !-f .htaccess のこの行で、同一ディレクトリー内に存在するファイルとブラウザなどからのリクエストパスがマッチすれば、次行のRewriteRuleは適用されず、そのファイルにapacheが直接アクセスします。ディレクトリーについても !-dの行があるので、存在しているjs や css ディレクトリー内のファイルも同様にcakePHPは経由せず、直接実在ファイルにapacheがアクセスします。 実在ファイル名パスをブラウザurl欄にいれて、もし、cakePHPのcontrollerが無いなどというエラーが出るようなら、ファイル名かディレクトリー名に間違いがあります。 あとは、apacheが読み込み出来るようにパーミッションを設定してください。通常604とします。 ちなみに、以下の設定は、 sitemap.xml というリクエストの時だけ、次行のRewriteRuleを適用するという意味になる。 RewriteCond %{REQUEST_FILENAME} ^sitemap.xml 実際には、!-fの行で既にsitemap.xmlは、はじかれて何も適用されずに表示しており、それ以外のcakePHP用のパス記述はここで全部弾かれる
お礼
mpro-gramさん ご回答ありがとうございます。 RewriteCond %{REQUEST_FILENAME} の意味が理解できました。 「ファイルやディレクトリが実在しない場合は、CakePHPのRewriteRuleを適応」 「ファイルやディレクトリが実在する場合はそのまま表示」 ということだったんですね。 「もともとCakePHPのinidex.php以外は塞がれている」と勘違いしていました。 よくよく考えてみると、そのような記述はないですよね。