※ ChatGPTを利用し、要約された質問です(原文:mod_rewriteの書き方について)
mod_rewriteの書き方について
このQ&Aのポイント
mod_rewriteの書き方について質問させていただきます。複数の設定をしたいのですが、404のエラーが出てしまい思っている動作になりません。
パラメーターがあった場合、URLの書き換えが正常に動作していますが、HTMLファイルへのアクセス時に404のエラーになってしまいます。
解決策を教えていただけると助かります。ご教示よろしくお願いいたします。
mod_rewriteの書き方について
いつもお世話になっております。
mod_rewiteについて質問させていただきます。
複数の設定をしたいのですが、404のエラーが出てしまい思っている動作になりません。
--------------------------------------------------
RewriteEngine on
(1)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule hoge/(.*)\/(.*)\/(.*)\/(.*)\.html$ /hoge/$1/$2.php?$3=$4 [L]
RewriteRule hoge/(.*)\/(.*)\/(.*)\/(.*)\/(.*)\/(.*)\.html$ /hoge/$1/$2.php?$3=$4&$5=$6 [L]
(2)
RewriteRule (.*)\.html$ /$1.php [L]
--------------------------------------------------
上記の設定を記載しております。
(1)はパラメーターがあった場合、URLの書き換えをしています。
ここはちゃんと動作しております。
(2)で、http://www.hoge.com/dir/index.html にアクセスした場合
/dir/index.php を呼び出すことに成功はしています。
ただ、http://www.hoge.com/dir/category.html にアクセスした場合
PHPファイルではなく、HTML(/dir/category.html)の場合404のエラーになってしまいます。
分かりづらい説明で申し訳ございませんが、ご教示よろしくお願いいたします。
[環境]
PHP:5.1.6
Linux:調べられません・・・わりと新しいバージョンです。
補足
mtaka2さん、ご回答ありがとうございます。 (.*)\ ↑の全ての文字列というのがよくないのでしょうか。 下記のURLは同じ意味です。 http://www.hoge.com/hoge/_dir/filename.php?j1=11 http://www.hoge.com/hoge/_dir/filename/j1/11.html hoge → 必ず固定となっています。 _dir → アンダーバーと英字が入ってくる可能性があります。 fimenam → アンダーバー・英数字の可能性があります。 j1 → 英数字です。 11 → 数字のみです。 上記のことを踏まえて、mod_rewriteを書き直してみました。 ------------------------------------------------------------ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule exec/(.*)\/([a-z]+)/([0-9a-z]+)/([0-9]+)\.html$ /exec/$1/$2.php?$3=$4 [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule exec/(.*)\/([a-z]+)/([0-9a-z]+)/([0-9]+)/([0-9a-z]+)/([0-9]+)\.html$ /exec/$1/$2.php?$3=$4&$5=$6 [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteRule (.*)\.html$ /$1.php [L] ------------------------------------------------------------ 上記の場合だと、not foundになってしまいました。 mtaka2さんにご提示いただきました、下記ルールを試してみたのですが not foundになってしまいました。 RewriteRule hoge/([^/]*)\/([^/]*)\/([^/]*)\/([^/]*)\.html$ hoge/$1/$2.php?$3=$4 [L] レンタルサーバのため、Apacheのログを見ることができません。 よろしくお願いいたします。