プロが教える店舗&オフィスのセキュリティ対策術

下記の環境があります。

本番環境
http://aaa.com/
テスト環境
http://bbb.com/

ページ内のリンクでhttpsを使うところがあり、
相対パスでリンクを書くことが出来ません。
なのでテスト環境のHTMLにはhttps://bbb.com/という
リンクを書くのですが、これだと本番環境に
HTMLを持っていったときに使えないため
書き換えなければなりません。

aaaの部分を何か共通のファイルで持たせるなりして
本番環境でもテスト環境でも同じHTMLファイルを
使いたいのですがよい方法はありませんでしょうか?

aspやjsp等を使うことは出来ません。
JavaScriptは使えます。
SSIは使えます。

A 回答 (6件)

こんな感じでどうでしょう?


アイデアとしては、置き換える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>

この回答への補足

早速のご回答ありがとうございます。
リンク1、リンク2、リンク3の値を変えたい場合は
forループの中でChangeLinkに値を加えるという
感じでしょうか?

HTMLをいじる担当者があまりJavaScript等に
詳しくないため、出来るだけ通常のHTMLを書くのと
同様に記述できればと考えております。

SSIで
<a href="<!--#include file=hoge.shtml-->/aaa.html">
のように書ければベストかと思っていたのですが
こんな書き方は出来ないようです。。

補足日時:2004/11/25 21:42
    • good
    • 0

>リンク1、リンク2、リンク3の値を変えたい場合は…


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

この回答への補足

説明不足で申し訳ございません。
下記のようにリンクを貼りたく思っています。

テスト環境
 リンク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にリンクを貼りたい場合は簡単だと思いますが
リンク先が異なるときの指定方法が
少し煩雑になってしまうかなと思いました。

補足日時:2004/11/26 11:09
    • good
    • 0

普通にHTMLを書いて、本番環境に移行する際に置換ソフトを使う……という方法ではだめでしょうか?


フォルダ内のファイルにある文字列をまとめて置換してくれるソフトはフリーでいろいろとあります。
私が愛用しているのはTextSSというソフトです。
http://www.vector.co.jp/vpack/browse/pickup/pw5/ …

このようなソフトで、
http://bbb.com → http://aaa.com
https://bbb.com → https://aaa.com
と置換動作を指定してやれば、ものの5分程度で全ての記述が書き換わります。
いかがでしょう。

この回答への補足

ご回答ありがとうございます。

確かにやりたいことはこのようなことなのですが
担当者が作業を忘れる恐れがあるため
出来るだけ単純なやり方にしたいと考えております。
テスト環境で確認したファイルを
そのまま本番環境に持っていけるのがベストだと
思っています。

<a href="JavaScript:location.href='https://' + location.hostname + '/a.asp?a=1'">リンク</a>

上記のようにリンクを貼れば一応やりたいことは
出来るのですが、あまりキレイじゃないなと
思っており他によい方法がないかと
思っているところです。

補足日時:2004/11/26 11:11
    • good
    • 0

ホスト名だけを置き換えるように変更してみました。


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>

この回答への補足

ありがとうございます!
IE6で確認してみたところはよさそうでした。

Netscape6.2で確認したところ
うまく動きませんでした。

やはりJavaScriptを使うと環境に依存してしまうのでしょうか。。

ところで
if(AObj(i).className=="change")
の判定は%HOSTNAME%という文字列を
他で使っていなかったら不要でしょうか?

補足日時:2004/11/26 15:14
    • good
    • 0

>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のバージョンとかも依存する部分があるのは、ある程度はしょうがないと思います。
ちゃんとした規格があって、どのブラウザもそれを厳格に守っている(バージョンアップしているとかも含めて)のなら問題ないのでしょうけど。
    • good
    • 0

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
    • good
    • 0
この回答へのお礼

うまく出来ました!
ありがとうございました!

なお、SSIも
<a href="http://<!--#echo var="HTTP_HOST"-->/a.asp?a=1">
でうまくいきました。
WEBサーバがSSIを使う設定になっていなかっただけでした。。
ただ、SSIだとサーバに負荷がかかるので
どれも一長一短かなと思っています。

テキスト置換の方法も含め、検討したいと思います。

ご丁寧に回答いただきありがとうございました!

お礼日時:2004/11/26 19:20

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!