• ベストアンサー

htaccessで静的URLを動的URLに書き換え

SEO対策としてcgiで動的に表示されるページを静的なURLで記載したいと思っております。 htaccessを使えば可能なようですが、http://www.aaa.com/tokyo/sibuyaのURLでhttp://www.aaa.com/cgi-bin/test/search.cgi?pref=tokyo&city=sibuyaを実行するにはどのように記載したらよいのでしょうか。 *tokyo,sibuyaの部分には任意の都道府県、都市名を入れたいです

  • egypt
  • お礼率87% (175/199)

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

  • ベストアンサー
  • t_ohta
  • ベストアンサー率38% (5071/13248)
回答No.4

> ついでで申し訳ないのですが、http://www.aaa.com/tokyo/sibuyaの「tokyo」「sibuya」の部分に日本語を入力すると、cgiの実行結果が文字化けしてしまいます。 > 何か改善の方法はありますでしょうか? URLエンコードされているとか、リンク元の文字コードがプログラムの文字コードと異なっていると言った事が原因ではないでしょうか。 拡張子がcgiなのでperlかと思いますが、decode関数等を使って文字コードを整えてやるといいかと思います。

egypt
質問者

お礼

ありがとうございます。 うまくいきました。 本当に助かりました。

その他の回答 (3)

  • t_ohta
  • ベストアンサー率38% (5071/13248)
回答No.3

RewriteEngine on RewriteCond %{REQUEST_URI} !^/cgi-bin/test/search.cgi$ RewriteRule ^/(.+)/(.+)$ /cgi-bin/test/search.cgi?pref=$1&city=$2 [L] または、最後の行を RewriteRule ^(.+)/(.+)$ /cgi-bin/test/search.cgi?pref=$1&city=$2 [L] で、どうでしょう。 2行目はリライトの無限ループ防止です。 3行目の2種類の違いは、パターンマッチの先頭に / を入れるか入れないかの違いです。 .htaccess で制御する場合、/ が入っているとマッチしない事があるので2パターン試してみてください。 httpd.conf 等に書く場合は / が必要なはずです。

egypt
質問者

お礼

/ をつけないパターンでうまくいきました。 ありがとうございます。 ついでで申し訳ないのですが、http://www.aaa.com/tokyo/sibuyaの「tokyo」「sibuya」の部分に日本語を入力すると、cgiの実行結果が文字化けしてしまいます。 何か改善の方法はありますでしょうか? ちなみに、http://www.aaa.com/cgi-bin/test/search.cgi?pref=東京&city=渋谷をそのまま入力すると文字化けはしません。

  • t_ohta
  • ベストアンサー率38% (5071/13248)
回答No.2

> しかし、うまく動作しませんでした。 > 何か考えられる問題はありますでしょうか? エラーが出ているのでしょうか? cgiにパラメータが渡って来ないのでしょうか? 渡ってきたパラメータが意図したものと違うのでしょうか?

egypt
質問者

お礼

再度ありがとうございます。 「エラー: このリンクは無効です。」となりますので、変換自体がされていないのではないかと思われます。

  • t_ohta
  • ベストアンサー率38% (5071/13248)
回答No.1

RewriteEngine on RewriteRule ^/(.+)/(.+)$ /cgi-bin/test/search.cgi?pref=$1&city=$2 [L]

egypt
質問者

お礼

さっそくご回答ありがとうございます。 しかし、うまく動作しませんでした。 何か考えられる問題はありますでしょうか?

関連するQ&A

  • htaccess の rewriterule でカタカナが入っているURLを使いたい

    htaccess の rewriterule でカタカナが入っているURLを 使いたいのですが、htaccessファイルがUTF-8で保存できないため困っています。 wikiフォルダへのrewriteは動作しています。 redirect ではなく rewrite で行いたいです。 何かいい方法がありませんか? ※htaccessサンプル RewriteEngine on RewriteCond %{HTTP_HOST} ^(www\.aaa\.com) RewriteRule ^/?(.*) http://www.aaa.com/wiki/メインページ [R=301,L]

  • htaccessでのクエリ付URLのリダイレクト

    .htaccessにて、Perlで作成されたスクリプトのURLを以下のようにmod_rewriteで変換を行っています。 RewriteEngine on RewriteBase /cgi/ RewriteRule ^([0-z]+)/([0-z]+)\.html$ index.cgi?mode=$1&no=$2 通常の場合、 http://example.com/cgi/index.cgi?mode=pv&no=1 といったURLが、mod_rewriteにて http://example.com/cgi/pv/1.html というURL形式でアクセスが可能です。 そこでやりたい事なのですが、上記のpvの箇所をpastという風に変更したいと思っています。 http://example.com/cgi/pv/1.html http://example.com/cgi/past/1.html スクリプト側の問題かも知れませんが、過去ログに移行したデータなどはpastになるのですが、何故かpv(現行ログ)でもアクセス出来てしまいまして、出来れば.htaccessでpastに統一したいと思っています。 そこで単純ながら、Redirect permanentを使い、 Redirect permanent /cgi/view/ http://example.com/cgi/past/ としたところ、リダイレクトはされるのですが、 http://example.com/cgi/past/1.html?mode=view&no=1 となってしまいます。 語尾のクエリ部分「?mode=view&no=1」が出ないようにしたいのですが、どのような方法があるか、ご教示頂けますと幸いです。 RewriteCond %{QUERY_STRING}なども調べて見たのですが、詳しくどう記述すれば良いかわかりませんでした。 よろしくお願いいたします。

    • ベストアンサー
    • CGI
  • .htaccessの書き方を教えて下さい。

    現在「A: http://○○○.jp/aaa/」と「B: http://aaa.com/」で同じサイトが表示されています。 「http://○○○.jp/」はレンタルサーバーのアカウントドメインで、その中の「aaaフォルダ」の中に独自ドメイン「http://aaa.com/」の中身がアップロードされているというわけです。 なので、現在は「http://○○○.jp/aaa/」でアクセスしても「http://aaa.com/」の中身が表示されている状態です。 これを、 A: http://○○○.jp/aaa/ ↑ 上記URLにアクセスされても、 B: http://aaa.com/と表示されるようにする為の.htaccessの書き方を教えて下さい。 よろしくお願いします。

  • htaccessでドメインの偽装

    こちらのカテゴリーであっているかわかりませんが…。 現在ホームページを2つ運営しています。 片方のURLがhttp://www.xxxxx.jp/ もう片方のURLがhttp://www.uuuuuu.com/とします。 xxxxx.jpの方ではCGIが使えないため、uuuuuu.comにCGIを設置し、それを呼び出しています。 当然CGIのページのみURLが変わってしまうのですが、 それを元のサイトと同じドメインにし、同じサーバー内で稼動してるように見せたいのです。 http://www.uuuuuu.com/cgi/xxxxx.cgi ↓ http://www.xxxxx.jp/cgi/xxxxx.cgi(でも実際に設置しているのはhttp://www.uuuuuu.com/) htaccessでそのようなことは可能でしょうか? 出来てしまったらhtaccessさえ使えれば誰だってドメイン偽装が出来てしまうので、無理だろうなぁとは思うのですが、 もし可能であれば教えていただけますでしょうか…。

  • 上層の.htaccessの影響回避

    よろしくお願いいたします。 さくらのサーバー(スタンダードプラン)を使っていて、 .phpを.htmlで動作させるために、いろいろ調べたところ、 さくらの環境下では以下のように.htaccessを設定するのがベストだと判明しました。 [ .htaccess の内容 ] DirectoryIndex index.html index.php Action myphp-script /php.cgi AddHandler myphp-script .html .php [ 前提条件 ] cp /usr/local/php/最新のバージョン番号/bin/php-cgi /home/USERNAME/www/php.cgi のコマンドを処理しておく。 この設定で、htmlの拡張子でも、phpが正しく動作してくれるようになったのですが、 その下層にあるディレクトリで上記の.htaccessの影響を避けたい(キャンセルしたい)とき 下層に設置する.htaccessにどのような記述を行えばよいでしょうか、、 ちなみに、「none」とだけ記入した場合もNGでした。 ※質問カテゴリがふさわしくなければ申し訳ございません。 サーバーの運用(Apacheの設定)などに関する質問です。 ■以下はより詳しい質問理由です。 そもそも影響を回避したい理由は トップが http://google.com/ の場合、 http://google.com/hoge/が下層にあるとします。 さらに、http://hoge.google.com/を開いたとき http://google.com/hoge/に対してリダイレクトするように設定しています。 .htaccessになんの記述もない時は、 http://hoge.google.com/でもhttp://google.com/hoge/でも 同じページが開かれます。 (SEO等の観点からも2つURLを持つのは好ましくないのは承知ですが;) ところが.htaccessに先ほどの設定を行うと 「The requested URL /php.cgi/index.html was not found on this server.」 というエラーメッセージが出てしまいます。 php.cgiを求めているのかと思い、http://google.com/hoge/直下に コピーしたphp.cgiも置いてみましたが、今度は真っ白なページが表示されるのみです。 .htaccessに何の設定もない時にうまくいっていたので、 http://google.com/hoge/ではhttp://google.com/直下の .htaccessに影響をうけないようにしてあげたいのです。 何卒よろしくお願いいたします。

  • 動的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リダイレクトさせたい場合、どのように記述すれば良いでしょうか?

  • 動的URLから静的URLへのリダイレクト

    htaccessで動的URLを静的URLに301リダイレクトしたいのですが、うまくいきません。 どのように記述すればよいでしょうか? 静的URL同士のリダイレクトしか分からず、困っています。 よろしくお願いします。 http://example.com/yyy.cgi?cate=1&page=1 リダイレクト先 http://example.com/zzz.htm

  • パラメーター付きのURLをリダイレクトしたい

    お世話になります .htaccess でリダイレクトを行いたいのですが、パラメータ付きのURLの為かリダイレクトができません。 .htaccess内の記述↓ redirect 301 /aaa/bbb.php?N=1 http://www.aaa.com/index.html 「?=N1」の部分を取れば問題なくリダイレクトします パラメータ付きのURLはリダイレクト可能でしょうか? よろしくお願いいたします

  • htaccessのリライトとエラーページ

    .htaccessのリライトとエラーページについて .htaccessでリライトの設定をしているのですが、うまくいかない部分があります。 まずwww無しでのアクセスは全てwwwありへ変更しています。 RewriteEngine On RewriteBase / RewriteCond %{HTTP_HOST} ^○○○.biz [NC] RewriteRule ^(.*)$ http://www.○○○.biz/$1 [L,R=301] 上記は正常に動作しています。 次は設置しているcgiのURLの設定をしています。 RewriteRule search/(.*) cgi/search/$1 [L] ##正常に動作 RewriteRule ^search/([0-9]+)$ cgi/search/navi.cgi?mode=kt&kt=$1 RewriteRule ^search/([0-9]+)/$ cgi/search/navi.cgi?mode=kt&kt=$1 残りの2つがうまく動作していません。 本来のURLが下記なので http://www.○○○.biz/cgi/search/navi.cgi?mode=kt&kt=01 ↓こちらでアクセスしてみると http://www.○○○.biz/search/01 404 ページが見つかりません http://www.○○○.biz/search/01/ 500 サーバーエラーが表示されてしまいます。 正常に動作している方でURLを短縮しているのでcgiの階層指定をやめてみましたがダメでした。 RewriteRule ^search/([0-9]+)/$ search/navi.cgi?mode=kt&kt=$1 またエラーページを指定しているのですが、403と404は動作していますが500が通常のページが表示されてしまいます。(401は未確認) ErrorDocument 401 /error/401.html ErrorDocument 403 /error/403.html ErrorDocument 404 /error/404.html ErrorDocument 500 /error/500.html 色々と調べましたが何がいけないのか分からず手詰まり状態です。 お手数ですがご回答頂けると幸いです。

    • ベストアンサー
    • HTML
  • .htaccessの書き方がわかりません。

    SEO対策の為、URLの統一をしたいです。 .htaccessで対応しようとしていますが、 一部書き方がわかりません。 ECの商品ページなのですが、 下記のように/を一番後ろにいれてもいれなくても 同じページが表示されるのでうしろにスラッシュを 入れる設定にしたいです。 ただ、その設定を行いたいのはitem階層のみなので その指定もいれないといけないのですが。。 http://www.example.com/item/abcabc http://www.example.com/item/abcabc/ ↓↓↓統一後↓↓ http://www.example.com/item/abcabc/

    • 締切済み
    • CGI