※ ChatGPTを利用し、要約された質問です(原文:.htaccessのURL書き換えができません)
.htaccessでURL書き換えできずにエラーが発生しています
このQ&Aのポイント
localhost/cat.phpにアクセスしてもheader.php、file/cat.php、footer.phpを出力するために、htaccessファイルにrewriteRuleを設定しましたが、エラーが発生しています。
原因はGETパラメータが正しく取得されていないことが原因です。
解決策としては、rewriteRuleの正規表現パターンを調整することや、print.php内でのGETパラメータの取得方法を確認することです。
print.php
----
$i=$_GET['que'];
$fname= file/$i.'.php';
include 'header.php'; include $fname; include 'footer.php';
----
というphpファイルがあります。
たとえば、localhost/print.php?que=cat にアクセスすると
header.php、file/cat,php、footer.phpをあわせたものが出力されることを想定しています。
最近、.htaccessというものを設定することによってURLを書き換えることができると知り、
localhost/cat.phpにアクセスしてもheader.php、file/cat,php、footer.phpをあわせたものが出力されるように、htaccessファイルに
----
RewriteEngine On
RewriteRule ^([a-zA-Z0-9_-]+)\.php$ print.php?que=$1
RewriteRule ^([a-zA-Z0-9_-]+)/\.php$ print.php?que=$1
----
と記述しました。
localhost/cat.phpにアクセスすると、localhost/print.php?que=catに書きかえられるので、print.phpにque=catがGETされ、
header.php、file/cat,php、footer.phpが出力されると期待したためです。
しかしいざ実行してみると、 failed to open stream: No such file or directory とエラーが出てきます。
原因を探ってみたところ、echo $fname;としてみると page.phpとのみ出力されることから、どうやらqueが正常にgetされていないようです。
自分ではこれ以上の原因と対策がわからないので、localhost/cat.phpと入力するとprint.phpにque=catをGETさせるような方法を教えてください。
よろしくお願いします。
お礼
>$fname= file/$i.'.php'; という部分ですが $fname = 'file/'.$i.'.php'; となるのが正しいかと思いますが、こちらは単なる記載ミスでしょうか? 申し訳ありません。記載ミスです。 >mod_rewrite を使わずに localhost/print.php?que=cat でアクセスした時は正しく表示されていますか? .htaccessはlocalhostの直下に --- RewriteEngine On RewriteRule ^([a-zA-Z0-9_-]+)\.php$ print.php?que=$cat RewriteRule ^([a-zA-Z0-9_-]+)/\.php$ print.php?que=$cat --- と書かれております。 1)この.htaccessが存在しない場合、localhost/print.php?que=catは正しく表示されます。(file/cat.phpがincludeされる) 2)この.htaccessが存在する場合、localhost/print.php?que=catは正しく表示されません。(file/cat.phpがincludeされない) localhost/cat.phpは正しく表示されません。(file/cat.phpがincludeされない)