mod_rewriteの使い方で、前回(http://q.hatena.ne.jp/1200309139)のように教えていただきました。


しかし、この方法だと「.html」のファイルを同じディレクトリに入れると、ブラウザがNot Foundと表示し、有効となりません。

そこで質問ですが、.htmlのファイルはそのままHTMLファイルとして表示させる方法はありますでしょうか?
また、特定のディレクトリのみmod_rewriteの設定を無効とさせる方法はありますか?

回答の条件
  • 1人2回まで
  • 登録:2008/02/03 17:42:03
  • 終了:2008/02/03 22:31:13

回答(3件)

id:y-kawaz No.1

y-kawaz回答回数1421ベストアンサー獲得回数2262008/02/03 17:47:37

ポイント40pt

前回の質問のどのパターンでも良いですが、RewriteRuleの前に以下のように2行のRewriteCondを追加すればよいです。

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)\.html(\?.*)?$ $1.php$2 [L]

!-d は「ディレクトリが存在しなければ」という条件で、!-f は「ファイルが存在しなければ」という条件を追加したことになります。

id:k27w

こちらの方法が一番簡単で、思い通りに出来ました。ありがとうございました。

2008/02/03 22:30:42
id:yoneto164 No.2

ヨネちゃん回答回数813ベストアンサー獲得回数942008/02/03 18:44:18

ポイント20pt

特定のディレクトリに

RewriteEngine Off

を設置するのが良いと思います。

http://www.avis.ne.jp/user-support/homepage/hosting/mode_t.html

id:khoshi3 No.3

khoshi3回答回数71ベストアンサー獲得回数122008/02/03 18:50:41

ポイント30pt

こんにちは。前回に引き続きになりますが、回答させていただきます。先に回答されている方の補足になれば幸いです。

>.htmlのファイルはそのままHTMLファイルとして表示させる方法

こんなのでいかがでしょうか? /test/foo.htmlが無いときに限り、/test/foo.phpにrewriteされます。

 <Directory "/var/www/html/test">

  Options ExecCGI FollowSymLinks

  <IfModule mod_rewrite.c>

   RewriteEngine On

   RewriteBase /test/

   RewriteCond %{REQUEST_FILENAME} !-f

   RewriteRule ^(.*).html $1.php [L]

  </IfModule>

 </Directory>

RewriteCondで条件付きrewriteが出来ます。詳細は下記URLあたりをご参照ください。

http://www.net-newbie.com/trans/mod_rewrite.html#RewriteCond

>特定のディレクトリのみmod_rewriteの設定を無効とさせる方法

これですが、逆に、上記のように Directoryディレクティブまたは.htaccessで、

特定のディレクトリ配下にだけ、Rewriteルールをつけたほうが安全で管理しやすいかと思います。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません