こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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」フォルダに入れてみたり…




できませんでした…



もう何がいけないのかぜんぜんわかりません…
こういうところに書き込むのは初めてですが、親身にしていただけると幸いです。
ご教授のほどどうぞよろしくお願いいたします。

投稿日時 - 2011-06-15 18:45:38

QNo.6811783

困ってます

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

ある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
に転送させているわけではありません。

投稿日時 - 2011-06-15 23:10:47

補足

ご回答ありがとうございます。

申し訳ありませんが「.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アドバイスいただけませんでしょうか><;

よろしくお願いいたします。

投稿日時 - 2011-06-16 10:17:50

お礼

解決しました><!

自身のスペルミスでしたorz
大変もうしわけございませんでした

RewriteRule ^/detail/(.*)\.html$ /detail/index.php?item=$1 [L] ではなく
                         ↑ここ間違いデシタ


RewriteRule ^/detail/(.*)\.html$ /detail/index.php?id=$1 [L] でしたね><

結果的にリンクが間違っていたのでしたね。
大変勉強になりました。本当にありがとうございました。

投稿日時 - 2011-06-16 10:46:56

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.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的によくなるといたりましたので
どうなんでしょうね。
最近は動的ページでもバンバン取得にきます。
むしろ動的ページのほうが更新頻度が高いことが多いので、
静的ページよりも取得に来る頻度が高いようにも思います。
ですから、最近はそれほど構築の検討材料にはしていません。
あくまでも私の感想ですが。

投稿日時 - 2011-06-16 10:42:44

お礼

アドバイスありがとうございます。

おかげさまで無事にURLが
http://○○○.net/detail/△.html
になり、ちゃんと表示されるようになりました。

mikemike7さんのSEO意見までいただき大変に参考になります。
今後の検討材料にさせていただきます。

今回はとりあえずせっかく勉強したので、
http://○○○.net/detail/△.html
でいかせていただきますね。

Lv3 → Lv5 くらいまで成長した気がします。

ありがとうございました。

投稿日時 - 2011-06-17 18:25:41

あなたにオススメの質問