PHPで静的ページ見せる方法について

このQ&Aのポイント
  • PHPでmod_rewriteを使用して動的ページを静的ページにする方法について教えてください。
  • 現在、.htaccessファイルを使用してURLの書き換えを試みていますがうまくいっていません。
  • レンタルサーバーのロケットネットを使用しており、制作者のPHPレベルは初心者です。ご教授いただけると幸いです。
回答を見る
  • ベストアンサー

PHPで静的ページ見せる方法について

PHPでmod_rewrite(静的ページに見せる方法)について教えてください。 PHPで生成された動的ページを静的ページにしたく思い、「.htaccess」ファイルを使用し、 mod_rewriteを書き込んでいますがURL書き換えられず困っています。 どうかご教授お願いいたします。 以下「.htaccess」の内容と環境、実験状況です。 やりたいこと。 トップのURL http://○○○.net/ 動的のURL  http://○○○.net/detail/index.php?id=△  こうしたい  http://○○○.net/detai/△.html ※○○○の部分はURLです。△は数字でページによって変動します。 「.htaccess」の中身 ------------------------------------------------------------ 1行目  Options +FollowSymLinks 2行目  RewriteEngine on 3行目  RewriteCond %{HTTP_HOST} ^www.○○○\.net 4行目  RewriteRule ^(.*)$ http://○○○.net/$1 [R=301,L] 5行目  Options +ExecCGI 6行目  AddHandler cgi-script .cgi 7行目  AddHandler cgi-script .pl 8行目  Options +FollowSymLinks 9行目  RewriteEngine on 10行目 RewriteCond %{HTTP_HOST} ^www.○○○\.net 11行目 RewriteRule ^/detail/([0-9A-Za-z]+)\.html$ /detail/index.php?id=$1 [L] ------------------------------------------------------------ サーバーはレンタルサーバーのロケットネットです。 最初の4行はWWWなしのURL統一のために書き込んでいます。 次の3行(5~6行目)はロケットネットではcgiを使用するために必要なものということでしたので 書き込んでいます。 8~9行目からが静的ページに見せたいがために書き込んだ内容です。 サイトのディレクトリ構造は以下の通りです。 index.php (第1階層) detailフォルダ (第1階層)   └ index.php(第2階層) 第1階層のindex.phpには以下のような記述がしてあります。(GET) <p><a href="/detail/index.php?id=<?=$line[0]?>">・<?=$line[1]?></a></p> 第2階層のindex.phpには以下のような記述がしてあります。 $ID=$_GET['id']; 制作者のPHPレベル Lv3 Next Level あと56くらぃ (はじめたばかりの初心者です) 上記のような「.htaccess」の中身ですと、URLは特に変更なく、 http://○○○.net/detail/index.php?id=△のままです。 wwwなしの統一はできています。cgiは普通に使えてます。 ロケットネット側に一度お問い合わせしたところ、 以下のような内容でできます。と返答がきました。 RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^/sample/(.*)$ /shop/sample/$1 できませんでした… 他に以下のような感じのものをためしてみました。 RewriteRule部分を RewriteRule ^/detail/(.*)$ /detail/index.php?id=$1 や RewriteRule ^http://○○○.net/detail/(.*)$ http://○○○.net/detail/index.php?id=$1 フルパスにしてみたり… RewriteRule ^(.*)$ index.php?id=$1 別に「.htaccess」ファイルを作り「detail」フォルダに入れてみたり… できませんでした… もう何がいけないのかぜんぜんわかりません… こういうところに書き込むのは初めてですが、親身にしていただけると幸いです。 ご教授のほどどうぞよろしくお願いいたします。

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

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

  • ベストアンサー
  • mikemike7
  • ベストアンサー率87% (97/111)
回答No.1

あるURLに対して、動的なページを表示させたいんですよね? 転送させたいわけじゃないんですよね? では、第一階層のindex.phpのリンクは <p><a href="/detail/<?=$line[0]?>.html">・<?=$line[1]?></a></p> とするべきじゃありませんか? mod_rewriteは http://○○○.net/detail/index.php?id=△ と http://○○○.net/detai/△.html を同じように表示させるものです。 △が同じなら、どちらのURLでも同じように見えます。 http://○○○.net/detail/index.php?id=△ を http://○○○.net/detai/△.html に転送させているわけではありません。

manaka1314
質問者

お礼

解決しました><! 自身のスペルミスでしたorz 大変もうしわけございませんでした RewriteRule ^/detail/(.*)\.html$ /detail/index.php?item=$1 [L] ではなく                          ↑ここ間違いデシタ ↓ RewriteRule ^/detail/(.*)\.html$ /detail/index.php?id=$1 [L] でしたね>< 結果的にリンクが間違っていたのでしたね。 大変勉強になりました。本当にありがとうございました。

manaka1314
質問者

補足

ご回答ありがとうございます。 申し訳ありませんが「.htaccess」のことについて あまり詳しくわからないのですが、転送させたいわけではありません。 http://○○○.net/detail/index.php?id=△ などの動的ページなURLですとSEO的によろしくないと伺いました。 いろいろ調べた結果 「.htaccess」でmod_rewriteを使用すると実際存在しないファイルですが、 http://○○○.net/detai/△.htmlのような静的ページのURLに書き換えることができる、 こうすることでSEO的によくなるといたりましたので、実践してみていて、 いきづまってるところです。 さて、 ご回答を参考にし、第一階層のindex.phpのリンクを以下に書き換えてみました。 <p><a href="/detail/<?=$line[0]?>.html">・<?=$line[1]?></a></p> 「.htaccess」ファイルの8~11行を以下に書き換えてみました。 RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^/detail/(.*)\.html$ /detail/index.php?item=$1 [L] 上記の結果、 http://○○○.net/detail/index.php?id=△  のままです。 なんとなくあと1歩でできるような気がするのですが、 もう1アドバイスいただけませんでしょうか><; よろしくお願いいたします。

その他の回答 (1)

  • mikemike7
  • ベストアンサー率87% (97/111)
回答No.2

>http://○○○.net/detail/index.php?id=△のままです。 HTML上で、 http://○○○.net/detail/△.html という形式でリンクしているのに、 http://○○○.net/detail/index.php?id=△ になってしまうということは、 1.HTML上でうまく修正ができていない。 2.http://○○○.net/detail/index.php?id=△に転送されている。 ということなのでしょう。 ブラウザに http://○○○.net/detail/△.html でアクセスして上記のURLのまま表示されますか? されるなら、PHP側の問題。もしくは、ブラウザのキャッシュの問題ではないでしょうか。 >SEO的によくなるといたりましたので どうなんでしょうね。 最近は動的ページでもバンバン取得にきます。 むしろ動的ページのほうが更新頻度が高いことが多いので、 静的ページよりも取得に来る頻度が高いようにも思います。 ですから、最近はそれほど構築の検討材料にはしていません。 あくまでも私の感想ですが。

manaka1314
質問者

お礼

アドバイスありがとうございます。 おかげさまで無事にURLが http://○○○.net/detail/△.html になり、ちゃんと表示されるようになりました。 mikemike7さんのSEO意見までいただき大変に参考になります。 今後の検討材料にさせていただきます。 今回はとりあえずせっかく勉強したので、 http://○○○.net/detail/△.html でいかせていただきますね。 Lv3 → Lv5 くらいまで成長した気がします。 ありがとうございました。

関連するQ&A

  • CodeIgniterのURLの簡素化

    CodeIgniterでの開発を考えているのですが、URLを簡単にするための.htaccessが有効にならずに困っています。 RewriteEngine on RewriteCond $1 !^(index\.php|css|user_guide|.+\.gif$|.+\.jpg$|.+\.png$|.+\.js$) RewriteRule ^(.*)$ /CodeIgniter/index.php/$1 [L] をどこにおけばいいのか分かりません。どの階層でしょうか?

    • ベストアンサー
    • PHP
  • mod_rewrite 動的ページを静的ページへ

    SEO対策として、動的ページを静的ページへリダイレクトさせたいと考えています。 レンタルサーバーのため、.htaccessへ記入するしか方法はないと思っているのですが、 そもそも「静的化するってこと自体」がよく分かってないので、教えてください。 <現状> ▼URL /hoge/index.php?id=1 ▼.htaccess RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([0-9A-Za-z]+)\.html$ details.php?id=$1 [L] <結果> 実行すると、/hoge/1.htmlとなり、望む結果を得られるのですが、 念のためディレクトリを指定しておきたいと思い、 RewriteRule ^/hoge/([0-9A-Za-z]+)\.html$ /hoge/details.php?id=$1 [L] としたところ、全く静的表示されなくなりました。 ■質問1 なぜ、ディレクトリを指定すると静的化できないのでしょうか? ■質問2 ネットでmod_rewriteの解説ページを検索してみると、静的化の例として、 「hoge/1.html へアクセスがあった際に、index.php?id=1の結果を返す」、 と記載されてます。 「index.php?id=1へアクセスした際に、hoge/1.html の結果を返す」 ようにした方がいいと思うのですが、 これって結果的には同じことをしている、と考えてよいのでしょうか? ■質問3 例えば、「/hoge/index.php?id=1」に対して、 「index.php?id=1へアクセスした際に、hoge/1.html の結果を返す」 ようにするには、どう書けばよいのでしょうか?

    • ベストアンサー
    • PHP
  • 動的ページを静的URLにしたい

    静的URLにしたいと思い.htaccessを設定したのですが読み込めません。 DirectoryIndex yomi.cgi RewriteEngine on RewriteBase /○○ ←.htaccessを置いてます RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([0-9A-Za-z]+).html$ yomi.cgi?mode=$1 [L] http://….net/○○/××.htmlとアクセスしても403エラーになってしまいます。 URLが間違っているのでしょうか? 通常http://….net/○○/yomi.cgiですが、yomi.cgi無しで通りDirectoryIndex yomi.cgiを削除すると403エラーになります。 色々と調べましたが解決出来ません。 すみませんが教えて下さい。 使用サーバー:さくらサーバー Apache1.3.39

  • 動的urlに最後にスラッシュを付ける方法

    動的urlの最後に無理矢理スラッシュを付けて静的にする方法を教えてください。 例 xxx/index.php?section=1 → xxx/index.php?section=1/ .htaccessに RewriteEngine On AllowEncodedSlashes On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^index.php?section=(.*)/$ index.php?section=$1 とやってもだめです。 教えてください。

    • 締切済み
    • 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
  • RewriteRule有効について(Apache設定)

    Apache2をWindows2kにインストールし運用しています。 RewriteRuleを行うが有効になりません。 httpd.confと.htaccessは、以下のように記述しています。 .htaccessは、レンタルサーバーに転送しテストすると正常に動作します。 と言うことは、ローカルサーバーの環境設定がまずいと言うことになるかと思うのですがどうしても分かりません。 ご教授の程、宜しくお願いします。 -----(httpd.conf)----- Options All AllowOverride All LoadModule rewrite_module modules/mod_rewrite.so -----(httpd.conf)----- -----(.htaccess)----- RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^info.html+ info.php RewriteRule ^k/index.html$ k/index.php RewriteRule ^k/([0-9A-Za-z]+)/$ k/index.php?id=$1 -----(.htaccess)-----

  • cakephpで特定ファイル表示(htaccess

    CakePHPではURLを一度index.phpにリダイレクトするような作りになっていますが、Googleの検索エンジン用のsitemap.xmlファイルを公開ディレクトリに置いた場合、そのファイルだけはmod_rewriteのルールから外して、普通にブラウザで見れる状態にしたいです。 .htaccessをどのように設定すれば良いか、教えてください。 なお、CakePHPのindex.phpファイルと.htaccess、sitemap.xmlは同じディレクトリに置いてあります。 [環境]CakePHP 1.3 PHP5.3 現在は.htaccessは以下のように設定されています。 <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] </IfModule> 上記の RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] の前の行に RewriteCond %{REQUEST_FILENAME} ^sitemap.xml を入れるとこのファイル自体はブラウザから見れるようになりますが、サイトのトップページ以外を見ようとすると、「Not Found」が返ってきてしまいます。

    • ベストアンサー
    • PHP
  • htaccessの上書き方法について

    昨日の質問の続きなのですが、 (昨日の質問:http://okwave.jp/qa/q8026821.html) 上記の質問で解決方法はわかったのですが、 私がCGIの触り方がわからないので、 自分なりに別の方法を探しました。 しかしうまくいかなかったので、また質問させてください。 ■質問 htaccessで「index.html」なしに設定したところ、 CGIがエラーを返すようなったので、 TOPディレクトリのhtaccess設定はそのままで、 CGIを使うページをまとめたディレクトリには 新たにhtaccessでindex.htmlありに、上書きできないかと考えました。 しかし結果はエラーでした。 どうにかして、特定のディレクトリにのみ、別のhtaccessを使って トップディレクトリに設置したhtaccessの設定を上書きする方法はないでしょうか。 ちなみに失敗した結果は下記の記述になります。 ▼成功したが、CGIページでエラーが出た記述 # URLの正規化(index.html無し) Options FollowSymLinks RewriteEngine on RewriteCond %{THE_REQUEST} ^.*/index.html RewriteRule ^(.*)index.html$ http://scinex-fw.co.jp/$1 [R=301,L] ▼下層ページで上書きできなかった記述 # URLの正規化(index.html有り) RewriteEngine on RewriteRule ^$ /index.html [R=301]

    • ベストアンサー
    • CGI
  • .htaccessによるリダイレクト

    .htaccessにおいて画像は除くCGIやPHPなどもサイト内のすべてに iモードID取得のための?guid=onを付与するために以下のように記述しましたところ RewriteEngine On RewriteCond %{HTTP_USER_AGENT} ^DoCoMo.* RewriteCond %{QUERY_STRING} ^$ RewriteCond %{REQUEST_URI} !\.(gif|jpe?g|png|swf|pdf|ico)$ [NC] RewriteRule ^(.*)$ http://homepage.jp/$1?guid=ON [R=302,L] 一部CGIにおいてguid=onがURLの最後に付与されていませんでした。 調べてみたところ http://homepage.jp/○○○.cgiや http://homepage.jp/index.htmlのような というURLにはURLの最後にきちんとguid=onが付与されているものの http://homepage.jp/○○○cgi?id=○○○や http://homepage.jp/○○○cgi&○○&○○ のようなURLにはguid=onが付与されていないことが分かり、 これらにもguid=onをつけるには どのように記述したらいいのか困っております。 よろしくお願いします。

    • ベストアンサー
    • CGI
  • .htaccessにおける記述について

    .htaccessにおいて画像は除くCGIやPHPなども含むサイト内のすべてに iモードID取得のための?guid=onを付与するために以下のように記述しましたところ RewriteEngine On RewriteCond %{HTTP_USER_AGENT} ^DoCoMo.* RewriteCond %{QUERY_STRING} ^$ RewriteCond %{REQUEST_URI} !\.(gif|jpe?g|png|swf|pdf|ico)$ [NC] RewriteRule ^(.*)$ http://homepage.jp/$1?guid=ON [R=302,L] 一部CGIにおいてguid=onがURLの最後に付与されていませんでした。 調べてみたところ http://homepage.jp/○○○.cgiや http://homepage.jp/index.htmlのような というURLにはURLの最後にきちんとguid=onが付与されているものの http://homepage.jp/○○○cgi?id=○○○や http://homepage.jp/○○○cgi&○○&○○ のようなURLにはguid=onが付与されていないことが分かり、 これらにもguid=onをつけるにはどうしたらいいのか困っております。 初心者なのでできたら簡単に教えていただけると幸いです。

専門家に質問してみよう