- ベストアンサー
mod_rewriteを使って動的ページを静的ページへリダイレクトする方法
- 質問1:ディレクトリを指定すると静的化できない理由は何ですか?
- 質問2:mod_rewriteで静的化する際に、URLの結果を返すのと逆にする意味はありますか?
- 質問3:/hoge/index.php?id=1に対して、hoge/1.htmlの結果を返すようにする方法はありますか?
- みんなの回答 (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 等に書き換えるようにする
その他の回答 (2)
■質問1 RewriteRule ^/hoge/([0-9A-Za-z]+)\.html$ /hoge/details.php?id=$1 [L] では動作しません。 htaccessのルールを無視した書き方では動作しません。 Rフラグなしの場合は相対パス。
お礼
>Rフラグなしの場合は相対パス。 ありがとうございました。全然気がつきませんでした。 参考URLも、勉強になりましたー。
- notnot
- ベストアンサー率47% (4900/10358)
勘違いしてらっしゃるようです。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)でもアクセスできる状態になる、ということを意味しているのでしょうか? 言い換えると、例えば、既存で動的にサイトを構築している場合、動的にリンクを生成している部分については、リンクの張替えをしないと、静的にならない、みたいな理解で、合ってますでしょうか?
お礼
ありがとうございました! ものすごく勘違いしていたことがよく分かりました…。 丁寧に解説していただいたので、とても分かりやすかったです!