.htaccessでURL書き換えできずにエラーが発生しています

このQ&Aのポイント
  • localhost/cat.phpにアクセスしてもheader.php、file/cat.php、footer.phpを出力するために、htaccessファイルにrewriteRuleを設定しましたが、エラーが発生しています。
  • 原因はGETパラメータが正しく取得されていないことが原因です。
  • 解決策としては、rewriteRuleの正規表現パターンを調整することや、print.php内でのGETパラメータの取得方法を確認することです。
回答を見る
  • ベストアンサー

.htaccessのURL書き換えができません

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させるような方法を教えてください。 よろしくお願いします。

  • PHP
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • t_ohta
  • ベストアンサー率38% (5078/13272)
回答No.1

$fname= file/$i.'.php'; という部分ですが $fname = 'file/'.$i.'.php'; となるのが正しいかと思いますが、こちらは単なる記載ミスでしょうか? mod_rewrite を使わずに localhost/print.php?que=cat でアクセスした時は正しく表示されていますか?

crouch-tancle
質問者

お礼

>$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されない)

関連するQ&A

  • htaccessでmod_rewrite

    htaccessに下記のように記述しました。 RewriteEngine on RewriteRule ^([0-9A-Za-z_]+)/$ index.php?p=$1 [L] RewriteRule ^([0-9A-Za-z_]+)/([0-9A-Za-z_]+)/$ index.php?p=$1&m=$2 [L] RewriteRule ^([0-9A-Za-z_]+)/([0-9A-Za-z_]+)/([0-9A-Za-z_]+)/$ index.php?p=$1&m=$2&y=$3 [L] RewriteRule ^sample/test/([0-9A-Za-z_]+)/$ sample/test.php?id=$1 [L] すると 「http://www.○○○.jp/index.php?p=●」 は 「http://www.○○○.jp/●/」 「http://www.○○○.jp/index.php?p=●&m=△」 は 「http://www.○○○.jp/●/△/」 「http://www.○○○.jp/index.php?p=●&m=△&y=■」 は 「http://www.○○○.jp/●/△/■」 でアクセスできました。 が、 「http://www.○○○.jp/sample/test.php?id=★」 は 「http://www.○○○.jp/sample/test/★/」 でアクセスできません。 おそらく、 「http://www.○○○.jp/sample/test/★/」を 「http://www.○○○.jp/index.php?p=sample&m=test&y=★」 として認識しているためだと思いますが、 対策がわかりません。 このような場合は、どう対処すればよいのでしょうか。

    • ベストアンサー
    • PHP
  • PHP、,htaccessの文字コードの設定について

    ホームページのフッターのテキストが、全ページ共通なので、PHPを使って管理したいと思っています。 ●htmlファイルにincludeを使って、footer.php(共通テキストをprint指定してあるファイル)を読み込みます。  <?php include "footer.php";?> ●php拡張子設定の為、.htaccess内に、  AddType application/x-httpd-php .htm と記述。 ●htmlファイル、footer.php、.htaccessを全て文字コードEUCで作成してテストしたところ無事認識され成功しました。 が、テストページ以外のhtmlファイルは全SHIFT-JISで構築しているため、文字化けを起してしまいます。 ので、htmlファイル、footer.php、.htaccessを全て文字コードSHIFT-JISで作成してみましたが、それこそ文字化けをしてしまいます。 .htaccessにAddType application/x-httpd-php .htmを記述しなければ文字化けは起こさないのですが、もちろんphp拡張子の設定がなっていたいので、動作しません。 一体どうすればよいでしょうか? PHP初心者です。 どなたか教えて下さい。よろしくお願いします。 説明不十分でしたら申し訳ございません。

    • ベストアンサー
    • PHP
  • htaccessについて

    ライブドアのレンタルサーバでHPを運用しています。 その中で、PHPを使って外部ファイルからテキストを取得して画面に表示するスクリプトを作りたいと思います。例えば、「001.txt」を取得したい場合は、GETパラメータの「file」に「001」を渡せば取ってくる感じです。 それを、mod_rewrite関数を使ってURLを書き換えたいのですが、.htaccessに以下を記載してもどうもうまく動きません。 ---------------------------------------------------------- RewriteEngine On RewriteRule ^/test/***/([a-z0-9_]+)$ /test/***/execute.php?file=$1 ---------------------------------------------------------- 試しにローカルのxamppのhttp.confに同じように記載したのですが問題なく動きます。レンタルサーバは.htaccess対応と書いてあるので、サーバ設定の問題でもなさそうですが。。 ご教授願います。

  • WordPressの.htaccessについて

    こんにちは。 wordpressでマルチサイトの環境を設定しようとしています。 ネットワークの設置より、次のような.htaccessを/wordpress/ディレクトリに配置しました。 --- RewriteEngine On RewriteBase /wordpress/ RewriteRule ^index\.php$ - [L] # add a trailing slash to /wp-admin RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L] RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^ - [L] RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L] RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L] RewriteRule . index.php [L] --- このファイルを配置しなくても、 http://domain.jp/wordpress/wp-admin/network/setup.php や http://domain.jp/wordpress/wp-admin/network/users.php は表示されますし、 http://domain.jp/wordpress/ にアクセスすると1つ目のブログが表示されます。 しかしこのファイルを配置しない場合、新たに作成した2つ目のブログである http://domain.jp/wordpress/test01/ は表示されません。ファイルを配置した場合は表示されます。 しかし、ディレクトリを見ても/wordpress/にはtest01ディレクトリは存在しません。おそらくは何らかの転送を行っているのだと思いますが、上記の.htaccessファイルを配置した場合、 http://domain.jp/wordpress/test01/ はどういう法則で、どこに転送されるのでしょうか。 どなたか教えてください。よろしくお願いいたします。

    • 締切済み
    • PHP
  • htaccessが作動しません

    初心者です。よろしくお願いします。 さくらのレンタルサーバーを利用しているのですが.htaccessをアップロードしても反映してくれません。 今、http://oshiete1.sakura.ne.jp/aaa.php?usr_no=1&log_no=11 のように最後がphpなどで終わっているものを~htmlで終わらせるようにしたいのですが上手くいきません。 ちなみにどこかのサイトを参考にして、.htaccessファイル以下を記述しアップしてみました。 DirectoryIndex mod_rewrite.php RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([0-9A-Za-z]+)/([0-9A-Za-z)]+)\.html$ mod_rewrite.php?var1=$1&var2=$2 [L] しかし何も起こりませんでした。 よろしくお願いします。

    • 締切済み
    • PHP
  • .htaccess の RewriteRule で、引数が10個以上あ

    .htaccess の RewriteRule で、引数が10個以上ある場合の書式について .htaccess に、下記のように記述をしています。 長ったらしいですが、要するに引数を16個渡したいのです。 RewriteRule ^example_([0-9A-Za-z\-]+)_([0-9A-Za-z\-]+)_([0-9A-Za-z\-]+)_([0-9A-Za-z\-]+)_([0-9A-Za-z\-]+)_([0-9A-Za-z\-]+)_([0-9A-Za-z\-]+)_([0-9A-Za-z\-]+)_([0-9A-Za-z\-]+)_([0-9A-Za-z\-]+)_([0-9A-Za-z\-]+)_([0-9A-Za-z\-]+)_([0-9A-Za-z\-]+)_([0-9A-Za-z\-]+)_([0-9A-Za-z\-]+)_([0-9A-Za-z\-]+).html$ example.php?VAR01=$1&VAR02=$2&VAR03=$3&VAR04=$4&VAR05=$5&VAR06=$6&VAR07=$7&VAR08=$8&VAR09=$9&VAR10=$10&VAR11=$11&VAR12=$12&VAR13=$13&VAR14=$14&VAR15=$15&VAR16=$16 ですが、こう書くと、例えば「VAR16=$16」の「$16」は「$1 と "6"(文字列としての6) を連結したもの」と解釈されてしまうらしく、うまく表現できません。 10個以上の引数を渡したい場合、どう記述すれば良いでしょうか。

    • ベストアンサー
    • PHP
  • xrea+ と 開発環境 とで .htaccess の Rewrite

    xrea+ と 開発環境 とで .htaccess の RewriteRule の挙動が違う .htaccessに、下記のように記述しています。 RewriteRule ^route_([0-9A-Za-z\-_]+)@([0-9]+)\.html$ route.php?RES=$1&RT=$2 この状態で、例えば route_8952014-00_8954061-00@06.html と指定すると、RESには'8952014-00_8954061-00',RTには'06'が渡されるはずだと思います。 実際に、開発環境(VS.Php 2.6 Standalone Edition)ではそのように動くのですが、 本番環境として使いたい、レンタルサーバの xrea+ ではそのようには動かず、 上記の例だと 404 Not Found になってしまいます。 なぜこのような挙動になるのか、ご説明いただけないでしょうか。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • mod_rewriteで静的化(PHP)

    ご質問です。 例えば以下のような静的なページをmod_rewriteを使って.htaccessで作成しようとしています。 RewriteRuleの記述内容がよくわからず困っています。 また、.htaccessは、どのディレクトリに配置すればよいでしょうか。 どなたかご存知でしたら教えて下さい。 http://localhost/free/index.php?action=member →http://localhost/free/member http://localhost/free/index.php?action=bbs →http://localhost/free/bbs http://localhost/free/index.php?action=usr →http://localhost/free/usr このような記述をしていますが、ご指摘お願いします。 ---------------------- DirectoryIndex index.php RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([0-9A-Za-z)]+)$ index.php?action=$1 [L] ---------------------- 宜しくお願いします。

    • 締切済み
    • PHP
  • .htaccessリダイレクトでの#や&について

    ハマってしまいました。ご教授ください。 .htaccessに #(%23) や &(%26) をエンコードしたものを渡すと、返りがなくなってしまうのですが、 引き継ぐ方法はないでしょうか? NEフラグをつけても駄目でした。 以下の検証で試してます。 [.htaccess] RewriteEngine On RewriteRule ^([0-9a-z]{1,10})/(.*)$ x.php?q=$2 [NE,L] [x.php] <?php echo $_GET['q']; ?> http://hogehoge.com/xxx/%23 とアクセスすると、 何も表示されません。 http://hogehoge.com/x.php?q=%23 とアクセスすると、 「#」 と表示されます。

  • CentOSでhtaccessを使用してmod_rewrite

    CentOSで、htaccessを使用してmod_rewriteを利用したいのですが、いまいちどうしたらいいのかがわかりません。 動的URLを静的URLに変換したく、 htaccessに RewriteEngine on RewriteRule ^([0-9A-Za-z_]+)/$ index.php?t=$1 [L] と書きこみました。 すると404エラーがでます。 試しに #RewriteEngine on RewriteRule ^([0-9A-Za-z_]+)/$ index.php?t=$1 [L] とコメントアウトしたところ、通常に表示されました。 RewiteEngine on が何かしらの影響を与えていると思うのですが、 対策がよくわからないので質問いたしました。 ちなみにhttpd.confの設定は完了しています。 LoadModule rewrite_module modules/mod_rewrite.so と記述。

専門家に質問してみよう