• 締切済み

動的ページから静的ページへ

http://sample.com/index.php?type=…&action=…&cid=…&id=… とういう動的URLを静的に変更したいのですがやり方がよくわかりません。 .htaccessファイルにmod_rewriteを使って記述すれば、 変更できるというところまではなんとなくわかったのですが、 どのように記述をすればいいのかがわかりません。 どなたか教えていただけないでしょうか. よろしくお願いします。

  • PHP
  • 回答数1
  • ありがとう数0

みんなの回答

回答No.1

関連するQ&A

  • mod_rewriteで動的ページを静的に変更

    PHPのカテゴリで同じ質問をしているのですが、3日目になっても、回答がいただけないので、同じ質問をさせていただきます。 動的ページを静的なページにしようとして、mod_rewriteの勉強をはじめようとしているのですが、疑問が出てきたので、確認させてください。 「何を当たり前のことを言ってるんだ。」と思われるかもしれませんが、教えて下さい。 htaccessからmod_rewriteを用いて、 (1)sampl.php?mod=1&id=3 を見かけ上、(2)sample/mod_1/id_3.html のようにすることは、mod_rewriteでできるということですが、 サイト全体を静的に見せようとしたら、プログラム側の呼出し(サイト内のリンク)を、(1)の形式から(2)の形式に全て変更しないといけないのでしょうか? htaccessだけをいじれば、静的にできると思い込んでいたのですが、 プログラムを変更しないといけないとなると、覚悟が必要なもので。。。

  • 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
  • 動的ページを静的ページに

    php+mysqlで掲示板のようなサイトを運営しているのですが、 SEO対策としてurlを、例えば、 a.php?mod=123&id=456 から、a/mod_123/id_456.html  のような感じに変換してやりたいと考えています。 ("/"や"_"などはとくにこだわりません) (当然、サイトはディレクトリ・ファイルが多数あり、引数も色々あります) 2時間くらい色々調べたところ、 (1).htaccessから、mod_writeを使って実現できる。 (2)私が使っている環境では、mod_writeが使える。 ところまでは分かったのですが、 (3)私が正規表現をほとんど理解できていない。 こともあり、そこから先で行き詰ってしまいました。 そこで、教えていただきたいのですが、 上記を実現するためには、わたしは、どうすれば良いでしょうか? こうゆうコードを.htaccessに入れれば、実現できるよというのがあると嬉しいのですが、そう簡単ではなさそうです。 やはり、正規表現をマスターして、mod_rewriteをちゃんと理解しないといけないでしょうか? (理解するにこしたことはないのですが、ブラックボックスとしてあつかえないでしょうか?) 以上、ややこしい質問で恐縮ですが、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • CakePHPの .htaccess設定について

    CakePHPをVPSで構築したサーバー(Linux)にインストールしました。 .htaccess(mod_rewrite)の設定がうまくいっていないようなので対処の方法を教えてください。 [環境] PHP 5.3.3 Apache 2.3.3 CakePHP 1.3.15 mod_rewriteが動いてるのはチェック用のプログラムで確認しました。 controllerとViewファイルを作り、文字の表示は成功しています。 フォームの実験を行った時にフォーム送信後のURL表示がうまくいっていません。(get/post共に) [書籍を参考にしたプログラム] Sampleコントローラーを作り、Viewの中にSampleディレクトリを作りその中にindex.ctpファイルを設置。フォームにテキストを入力して送信ボタンを押すと、テキストが表示されるプログラムです。 [コントローラー]sample_controller.php class HelloController extends AppController { public $name = 'Hello'; public $uses = null; public $layout = "hello"; function index(){} function sendForm(){ ~フォームで送られたテキストを表示(プログラムは省略)~ } } [index.ctp]のフォームのHTML <form method="post" action="./sendForm"> ~省略~ <input type="submit" /> </form> http://www.example.com/sampleでフォームを開きテキストを入力して送信ボタンを押すと http://www/example.com/sample/sendForm というURLになるはずなのですが、 http://www.example.com/sendForm となってしまいます。 試しにブラウザから「http://www/example.com/sample/sendForm」というURLを入力してみますと、フォームで入力したデータは表示されませんが、ページ自体は表示されます。 もう一つ、index.ctpの<form method="post" action="./sendForm">のアクションのパスを /sample/sendForm に変更してみますとデータも表示され、求めた結果になります。 以前、別の環境でこのプログラムを動かしたときは、<form method="post" action="./sendForm">のままでうまくいったので、.htaccessのファイルの設定に問題があると予想されます。 下記にcakePHPの設定情報を記載しますので、間違っている部分を指摘していただければと思います。 ※ディレクトリの構成は下記のページの「3.4.3. 高度なセットアップ:その他のインストール方法」を参考にしています。 http://cakephp.jp/old_doc/ch03s04.html [アプリケーションディレクトリ] /home ____/me ________/mysite ____________/config ____________/controllers ____________/models ____________/plugins ____________/tmp ____________/vendors ____________/views ____________index.php ____________.htaccess→「htaccessファイル1」● [公開ディレクトリ] /var ____/www ________/html ____________/example.com→ドキュメントルート _______________/css _______________/files _______________/img _______________/js _______________.htaccess→「htaccessファイル2」● _______________css.php _______________favicon.ico _______________index.php [コアファイルディレクトリ] /usr ____/lib ________/cake ____________/cake ________________/config ________________/docs ________________/libs ________________/scripts ________________app_controller.php ________________app_model.php ________________basics.php ________________bootstrap.php ________________dispatcher.php ____________/vendors ____________/plugins ____________index.php ____________.htaccess→「htaccessファイル3」● 「htaccessファイル1」(アプリケーション) -------------------------------------------------- <IfModule mod_rewrite.c> RewriteEngine on   RewriteBase /cake/app→■追加  RewriteRule ^$ webroot/ [L] RewriteRule (.*) webroot/$1 [L] </IfModule> ------------------------------------------------- 「htaccessファイル2」(公開) -------------------------------------------------- <IfModule mod_rewrite.c> RewriteEngine On   RewriteBase / →■追加  RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] </IfModule> -------------------------------------------------- 「htaccessファイル3」(コア) -------------------------------------------------- <IfModule mod_rewrite.c> RewriteEngine on   RewriteBase /cake→■追加 RewriteRule ^$ app/webroot/ [L] RewriteRule (.*) app/webroot/$1 [L] </IfModule> -------------------------------------------------- 疑問点は下記のようになっています。 (1)追加した部分のRewriteBaseはこれで良いのか? (2)RewriteRule ^$ webroot/ [L] RewriteRule (.*) webroot/$1 [L] の部分はこのままで良いのか?webroot部分の変更は必要か? (3)RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]の部分はこのままで良いのか?

    • ベストアンサー
    • PHP
  • mod_rewriteについて

    .htaccessにて、mod_rewriteを使用して、URLの書き換え を行いたいのでがうまく動作してくれません。 上記の記述で http://www.aaaaaaa.jp/php/user/bbb/index.php を http://www.aaaaaaa.jp/bbb/ に変更したいのですが どのように記述したら、動作するのでしょうか。 ご教授をお願いします。 RewriteEngine on RewriteRule ^bbb$ /php/user/bbb/index.php [L] 上記だと、http://www.aaaaaaa.jp/php/user/bbb/index.php のままです。

    • ベストアンサー
    • PHP
  • 動的URLから静的URLへの301リダイレクト

    下記のように動的URLを静的なURLに置き換えています。 http://www.sample.com/dir/aaa/index.php?content_id=1 ↓ http://www.sample.com/aaa_index.content_id_1.htm この動的URLを、置き換えた静的URLへ301リダイレクトさせたいのですが、うまくいきません。 htaccessの記述を下記のようにしましたが、多分、動的URLの「?」があるためうまくいかないようです。 RewriteEngine on RewriteBase / RewriteRule ^dir/aaa/index\.php?content_id=(.*)$ /aaa_index.content_id_$1.htm [R=301,L] 「?」が含まれる動的URLから静的URLに301リダイレクトさせたい場合、どのように記述すれば良いでしょうか?

  • CentOSでhtaccessを使用してmod_rewrite

    CentOSで、htaccessを使用してmod_rewriteを利用したいのですが、いまいちどうしたらいいのかがわかりません。 動的URLを静的URLに変換したく、 htaccessに RewriteEngine on RewriteRule ^([0-9A-Za-z_]+)/$ index.php?t=$1 [L] と書きこみました。 すると404エラーがでます。 試しに #RewriteEngine on RewriteRule ^([0-9A-Za-z_]+)/$ index.php?t=$1 [L] とコメントアウトしたところ、通常に表示されました。 RewiteEngine on が何かしらの影響を与えていると思うのですが、 対策がよくわからないので質問いたしました。 ちなみにhttpd.confの設定は完了しています。 LoadModule rewrite_module modules/mod_rewrite.so と記述。

  • mod_rewriteでURLを書き換えたい

    現在掲示板を運営していますが、Googleなど検索サイトからのクロールがうまく行われません(サイトマップなどは試しました)。 URLに“?”や“=”が含まれる動的なページはクロールされずらいことがあるとのことで、調べてみると、mod_rewriteを使うことで 静的ページのように表現できるということまでわかりました。 また、レンタルサーバに問い合わせた結果、mod_rewriteは.htaccessファイルに記述することで使用することができるとのことでした。 (例)http://www.aa.com/bb.php?cc=123 現在上記のようなURLで、最後の数字が入れ替わるようになっています。 このURLの“?”や“=”を“/”などを代用するなりして表示されないようにしたいと考えておりますが、 いろいろ調べてみましたが、私のスキルでは具体的にどのように書けばよいのかわかりませんでした。 .htaccessにいかように記述すればよいのでしょうか。 アドバイスのほどよろしくお願いいたします。

  • mod_rewriteによるURLの書き換え

    mod_rewriteを使ってURLの書き換えを行いたいのですが、どうしてもうまくいきません…。 http://***.main.jp/rewrite/name/index.shtml?total=num にアクセスされた場合に http://***.main.jp/rewrite/php.php?title=name?total=num に切り替えて処理させたいと思っています。 .htaccessには RewriteEngine on RewriteRule ^(.*)/index\.shtml\?total=([0-9]*)$ rewrite/php.php?title=$1&total=$2 このように記述したのですが、書き換えが行われずにindex.shtmlの内容が表示されてしまいます。 どうか、ご教授いただけませんでしょうか? サーバーはロリポップを使用しています。

  • 正規表現の際、特定の単語を除外したい

    apacheのmod_rewriteでURLを書き換えたいと思っています。 以下が.htaccessのコードになります。 ------------------------------------------------------------------------- RewriteEngine On RewriteRule ^([a-z0-9_-]+).htm$ execute.php?id=$1 ------------------------------------------------------------------------- 例えば、”http://moge/test.htm”にアクセスすると”http://moge/execute.php?id=test”と同じようになるというものです。 ディレクトリにはexecute.phpの他にindex.htmを置きたいと思っているのですが、上のhtaccessを設置すると、”http://moge/execute.php?id=index”に飛ばされてしまいます。そこで、正規表現で特定の単語(index)を除外するにはどうすればいいのでしょうか? ご回答お願いします。