mode_rewriteを使ってPHPファイルの拡張子をhtmlに変換しています。

list.phpのパラメータにページ番号を付けて、「page-1.html」のように
表示したくて以下のようなコードをhtaccessに書いたのですが、404エラーになります。

RewriteEngine On
RewriteRule ^(.*)\.html $1.php [L]
RewriteRule ^page-(.*)\.html list.php?page=$1 [L]

2行目に「すべてのPHPファイルをHTMLにする」記述をしているからだと思いますが、
目的のことをしたい場合、どういう書き方にすればいいのでしょうか?

回答の条件
  • 1人2回まで
  • 13歳以上
  • 登録:2010/04/08 14:04:34
  • 終了:2010/04/08 21:33:56

ベストアンサー

id:rouge_2008 No.2

rouge_2008回答回数594ベストアンサー獲得回数3512010/04/08 19:46:21

ポイント60pt

実在するファイルが書き換えの対象にならないように、「RewriteCond」で条件を追加してください。

RewriteEngine On

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

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

※上記で上手くいかない場合は、コメントアウトを外して、実在するフォルダも対象外になるようにしてください。

ちなみに、「http://~」記述した場合はリダイレクトになりますので、現状のように「.htaccess」を設置した場所からの相対パスか、「/xxx/~」のようにWEBルートからのパスで指定するといいです。

id:kt26

この書き方で出来ました。大変参考になりました。

2010/04/08 21:32:32

その他の回答(1件)

id:y-kawaz No.1

y-kawaz回答回数1420ベストアンサー獲得回数2252010/04/08 14:28:44

ポイント10pt

RewriteRuleは上から順にマッチするので順番を入れ替えて以下のようにすれば良いと思います。

RewriteEngine On
RewriteRule ^page-(.*)\.html list.php?page=$1 [L]
RewriteRule ^(.*)\.html $1.php [L]
id:kt26

コメントの方と同じで、順番を変えただけではtest.htmlのようなファイルが表示されません。

2010/04/08 18:18:08
id:rouge_2008 No.2

rouge_2008回答回数594ベストアンサー獲得回数3512010/04/08 19:46:21ここでベストアンサー

ポイント60pt

実在するファイルが書き換えの対象にならないように、「RewriteCond」で条件を追加してください。

RewriteEngine On

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

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

※上記で上手くいかない場合は、コメントアウトを外して、実在するフォルダも対象外になるようにしてください。

ちなみに、「http://~」記述した場合はリダイレクトになりますので、現状のように「.htaccess」を設置した場所からの相対パスか、「/xxx/~」のようにWEBルートからのパスで指定するといいです。

id:kt26

この書き方で出来ました。大変参考になりました。

2010/04/08 21:32:32
  • id:rouge_2008
    2行目の記述も必要なのでしたら、2行目と3行目の記述を逆にしてみてください。
    先に適用させるようにすれば大丈夫ではないかと思います。

    RewriteEngine On
    RewriteRule ^page-(.*)\.html list.php?page=$1 [L]
    RewriteRule ^(.*)\.html $1.php [L]
  • id:kt26
    PHPのファイルではなく、元のファイル名がtest.htmlのようなファイルが表示されません。
    ちなみに2行目をコメントアウトすると、test.htmlは表示されます。
  • id:kt26
    ちょっと質問の内容が足りないと思いますので、追記します。

    PHPファイル → htaccessに記述したとおりの表示にしたい
    その他のファイル → そのままの拡張子でアクセスしたい

    問題 → htmlファイルが表示しない(Not Found)
  • id:Km1967
    順番を入れ替えるだけでなく http:// から list.php を指定してみたか?

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

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

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

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