• ベストアンサー

本番環境とテスト環境のURL

下記の環境があります。 本番環境 http://aaa.com/ テスト環境 http://bbb.com/ ページ内のリンクでhttpsを使うところがあり、 相対パスでリンクを書くことが出来ません。 なのでテスト環境のHTMLにはhttps://bbb.com/という リンクを書くのですが、これだと本番環境に HTMLを持っていったときに使えないため 書き換えなければなりません。 aaaの部分を何か共通のファイルで持たせるなりして 本番環境でもテスト環境でも同じHTMLファイルを 使いたいのですがよい方法はありませんでしょうか? aspやjsp等を使うことは出来ません。 JavaScriptは使えます。 SSIは使えます。

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.6

NN6.2で確認してみました。 function SetLink(){ var AObj=document.links; for(i=0;i<AObj.length;i++){ AObj[i].href=(AObj[i].href).replace(/%HOSTNAME%/i,hostname); } } の様にしてみて下さい。 やはり、AObj(i)→AObj[i]にしたら動きました。 普段IEしか使っていないので気づきませんでした。 考えてみたら、この書き方が正統ですね。 すみませんm(_ _)m

lucasi
質問者

お礼

うまく出来ました! ありがとうございました! なお、SSIも <a href="http://<!--#echo var="HTTP_HOST"-->/a.asp?a=1"> でうまくいきました。 WEBサーバがSSIを使う設定になっていなかっただけでした。。 ただ、SSIだとサーバに負荷がかかるので どれも一長一短かなと思っています。 テキスト置換の方法も含め、検討したいと思います。 ご丁寧に回答いただきありがとうございました!

その他の回答 (5)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.5

>if(AObj(i).className=="change") そうですね。 普通、%名前%とか使わないので、 クラス名で確認する必要は特に無くなりました。 要りません。 alertも要りませんね。 >Netscape6.2で確認したところ すみません、NNは、確認していません。 classNameをやめて AObj(i)をAObj[i]に変えると良いかも知れません。 replaceがjavascript1.2の機能なので、 そこら辺も関係あるかもしれません。 NN7.1だと動くかもしれません。 NNで、alert(AObj[i].href)が表示される(アクセスできる)なら、replaceだけが問題だと思うので replaceをsubstringやindexOfを使う形(低レベルなもの)に置き換えるといいかもしれません。 当方6.2は、手元にないのですが、ちょっと別の書き方も考えてみます。 NNのスクリプトコマンドプロンプト(だっけ?)でどこでエラーになるか教えてくれますか? >JavaScriptを使うと環境に依存 ブラウザに依存する部分とかjavascriptのバージョンとかも依存する部分があるのは、ある程度はしょうがないと思います。 ちゃんとした規格があって、どのブラウザもそれを厳格に守っている(バージョンアップしているとかも含めて)のなら問題ないのでしょうけど。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

ホスト名だけを置き換えるように変更してみました。 location.hostnameやlocation.hostは、取得できない場合があるので前回と同様外部スクリプトファイルで変数定義する様にしました。 各リンクにはホスト名を置き換える標として%HOSTNAME%をホスト名として記入するルールにします。 hostname.js ----------- var hostname="aaa"; ------------------- var hostname="bbb"; ------------------- <script src="hostname.js"></script> <script type="text/javascript"> <!-- //var hostname=aaa; //外部定義: aaa または bbb function SetLink(){ var AObj=document.links; for(i=0;i<AObj.length;i++){ if(AObj(i).className=="change"){ alert(AObj(i).href); AObj(i).href=(AObj(i).href).replace(/%HOSTNAME%/i,hostname); } } } //--> </script> <body onload="SetLink()"> <a class="change" href="https://%HOSTNAME%.com/a.asp?a=1">リンク1</a> <a class="change" href="https://%HOSTNAME%.com/a.asp?a=2">リンク2</a>

lucasi
質問者

補足

ありがとうございます! IE6で確認してみたところはよさそうでした。 Netscape6.2で確認したところ うまく動きませんでした。 やはりJavaScriptを使うと環境に依存してしまうのでしょうか。。 ところで if(AObj(i).className=="change") の判定は%HOSTNAME%という文字列を 他で使っていなかったら不要でしょうか?

回答No.3

普通にHTMLを書いて、本番環境に移行する際に置換ソフトを使う……という方法ではだめでしょうか? フォルダ内のファイルにある文字列をまとめて置換してくれるソフトはフリーでいろいろとあります。 私が愛用しているのはTextSSというソフトです。 http://www.vector.co.jp/vpack/browse/pickup/pw5/pw005236.html このようなソフトで、 http://bbb.com → http://aaa.com https://bbb.com → https://aaa.com と置換動作を指定してやれば、ものの5分程度で全ての記述が書き換わります。 いかがでしょう。

lucasi
質問者

補足

ご回答ありがとうございます。 確かにやりたいことはこのようなことなのですが 担当者が作業を忘れる恐れがあるため 出来るだけ単純なやり方にしたいと考えております。 テスト環境で確認したファイルを そのまま本番環境に持っていけるのがベストだと 思っています。 <a href="JavaScript:location.href='https://' + location.hostname + '/a.asp?a=1'">リンク</a> 上記のようにリンクを貼れば一応やりたいことは 出来るのですが、あまりキレイじゃないなと 思っており他によい方法がないかと 思っているところです。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

>リンク1、リンク2、リンク3の値を変えたい場合は… 2種類のリンクを変更するだけじゃないのですか? サンプルは、classがchangeのものだけを置き換えます。 普通のリンクはそのままです。 サンプルでは、リンクが3つ連続していますが、実際は点在しているのだろうということです。

lucasi
質問者

補足

説明不足で申し訳ございません。 下記のようにリンクを貼りたく思っています。 テスト環境  リンク1:https://bbb.com/a.asp?a=1  リンク2:https://bbb.com/a.asp?a=2 本番環境  リンク1:https://aaa.com/a.asp?a=1  リンク2:https://aaa.com/a.asp?a=2 お教えいただいた方法だと 同じURLにリンクを貼りたい場合は簡単だと思いますが リンク先が異なるときの指定方法が 少し煩雑になってしまうかなと思いました。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

こんな感じでどうでしょう? アイデアとしては、置き換えるURL名を、変数でlink.jsファイルで持ちこれの中身を本番環境とテスト環境で変えます。 link.js -------- var ChangeLink="http://aaa.com/"; -------- var ChangeLink="https://bbb.com/"; -------- <html> <head> <title>TITLE</title> <script src="link.js"></script> <script type="text/javascript"> <!-- function SetLink(){ var AObj=document.links; for(i=0;i<AObj.length;i++){ if(AObj(i).className=="change"){ AObj(i).href=ChangeLink; } } } //--> </script> </head> <body onload="SetLink()"> <a class="change" href="#">リンク1</a> <a class="change" href="#">リンク2</a> <a class="change" href="#">リンク3</a> </body> </html>

lucasi
質問者

補足

早速のご回答ありがとうございます。 リンク1、リンク2、リンク3の値を変えたい場合は forループの中でChangeLinkに値を加えるという 感じでしょうか? HTMLをいじる担当者があまりJavaScript等に 詳しくないため、出来るだけ通常のHTMLを書くのと 同様に記述できればと考えております。 SSIで <a href="<!--#include file=hoge.shtml-->/aaa.html"> のように書ければベストかと思っていたのですが こんな書き方は出来ないようです。。

関連するQ&A