• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:mod_rewrite 動的ページを静的ページへ)

mod_rewriteを使って動的ページを静的ページへリダイレクトする方法

このQ&Aのポイント
  • 質問1:ディレクトリを指定すると静的化できない理由は何ですか?
  • 質問2:mod_rewriteで静的化する際に、URLの結果を返すのと逆にする意味はありますか?
  • 質問3:/hoge/index.php?id=1に対して、hoge/1.htmlの結果を返すようにする方法はありますか?

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

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.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 等に書き換えるようにする

re999
質問者

お礼

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

その他の回答 (2)

noname#130824
noname#130824
回答No.2

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

参考URL:
http://xn--u8jxb9ib9150b2px.jp/htaccess/rewritecgi/
re999
質問者

お礼

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

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.1

勘違いしてらっしゃるようです。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で処理され、処理後に再度付加されます。

re999
質問者

補足

>勘違いしてらっしゃるようです。 根本的に勘違いしていたようなので、追加で教えてください。 「静的化する」というのは、 「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)でもアクセスできる状態になる、ということを意味しているのでしょうか? 言い換えると、例えば、既存で動的にサイトを構築している場合、動的にリンクを生成している部分については、リンクの張替えをしないと、静的にならない、みたいな理解で、合ってますでしょうか?