• ベストアンサー

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の部分には任意の都道府県、都市名を入れたいです

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

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

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

egypt
質問者

お礼

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

その他の回答 (3)

  • t_ohta
  • ベストアンサー率38% (5241/13712)
回答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% (5241/13712)
回答No.2

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

egypt
質問者

お礼

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

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

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

egypt
質問者

お礼

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

関連するQ&A