最速怪談選手権

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 の結果を返す」
ようにするには、どう書けばよいのでしょうか?

A 回答 (3件)

#1です。


「静的化」というのは技術用語じゃなくてSEO業界用語なので、厳密な意味はなくて使う人によりそれぞれと思いますが、おおむね、「QUERYSTRING(URLの ? 以降)を、ユーザから見えなくする」 ということのようです。
別の言い方をすると、「PHPやPerlなどを使い、QUERYパラメータを見てHTMLページをスクリプトでリクエスト毎に動的に生成して見せるのでなく、予め作ってあるHTMLファイルを見せているかのごとく見せかける」。毎回動的に作っていない=静的 ということ。

つまり、HTML中の A タグの hrefなどもすべて、/hoge/1.html のように変更します。
サーバー内で実際には index.php がQUERYSTRINGを処理する訳なので、サーバの入り口で /hoge/1.html を、index.php?id=1 の形式に変換してPHPを起動してやる必要があります。

やることは2つで、
1) HTML生成しているスクリプトの a href= の部分の作成部分を修正して、<a href="index.php?id=1"> とかを作成している部分を、<a href="1.html"> とかを作成するようにする
2) .htaccess で、rewrite 機能を使って、1.html 等を index.php?id=1 等に書き換えるようにする
    • good
    • 0
この回答へのお礼

ありがとうございました!
ものすごく勘違いしていたことがよく分かりました…。
丁寧に解説していただいたので、とても分かりやすかったです!

お礼日時:2011/01/06 00:16

■質問1


RewriteRule ^/hoge/([0-9A-Za-z]+)\.html$ /hoge/details.php?id=$1 [L]
では動作しません。
htaccessのルールを無視した書き方では動作しません。
Rフラグなしの場合は相対パス。

参考URL:http://xn--u8jxb9ib9150b2px.jp/htaccess/rewritec …
    • good
    • 0
この回答へのお礼

>Rフラグなしの場合は相対パス。
ありがとうございました。全然気がつきませんでした。
参考URLも、勉強になりましたー。

お礼日時:2011/01/06 00:19

勘違いしてらっしゃるようです。

mod_rewriteで何もしないと、

index.php?id=1のURLへブラウザでアクセスすると、サーバのindex.phpが起動されてid=1がわたる

ですよね。それを、

hoge/1.htmlのURLへブラウザでアクセスすると、サーバのindex.phpが起動されてid=1がわたる

ようにしたいのですよね?

それを短く書くと
>「hoge/1.html へアクセスがあった際に、index.php?id=1の結果を返す」、
ということです。

質問1
.htaccessを hoge/.htaccess に置いているのであれば、URL中の/hogeは除去されてからmod_rewriteで処理され、処理後に再度付加されます。

この回答への補足

>勘違いしてらっしゃるようです。
根本的に勘違いしていたようなので、追加で教えてください。

「静的化する」というのは、
「index.php?id=1のURLへブラウザでアクセスすると、サーバのindex.phpが起動されてid=1がわたる」という処理自体を変えるのではなくて、
上記の処理+さらに下記のような別の処理も走らせる、ということなのでしょうか?
「hoge/1.htmlのURLへブラウザでアクセスすると、サーバのindex.phpが起動されてid=1がわたる」

つまり、最終的には、「index.php?id=1」へアクセスしたら、自動的に「hoge/1.html」へ切り替わるのではなく、
「index.php?id=1」(動的url)でもアクセスできるし、「hoge/1.html」(静的url)でもアクセスできる状態になる、ということを意味しているのでしょうか?

言い換えると、例えば、既存で動的にサイトを構築している場合、動的にリンクを生成している部分については、リンクの張替えをしないと、静的にならない、みたいな理解で、合ってますでしょうか?

補足日時:2011/01/05 13:15
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!