スポンサー広告 - スポンサーサイト

--/--/-- (--) --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

【プログラミング】その他 - google検索の罠

2012/09/23 (日) 23:35

少し前に仕事で少々関わったので備忘として。

googleの検索結果のリンクを踏んでサイトにアクセスすると、相対パスで指定している全てのリンクや画像が参照できない現象がありました。
原因を簡単に説明すると、googleの検索結果がURLの末尾に「/」(スラッシュ)を追加していたことが原因です。
どうやら拡張子が無いようなサイトだと、勝手に末尾に付与してしまうようにいつからか仕様を変更してしまった模様。

最後が拡張子ってのは「hoge.htm」「hoge.cgi」「hoge.php」「hoge.jsp」等がメジャーな感じでしょうか。
JAVAなんかでサーブレットを組んでいると分かりやすいですが、サーブレットとURLをマッピングす定義をします。
その際に、拡張子を書く必要は無く、単純に「*/hogeServlet」なんて書くと、末尾が「/hogeServlet」ならどんなURLでもサーブレットが起動します。
冒頭の事例もこのマッピングによって起こりました。

末尾に「/」がつくことにより何が起こるのかというと、相対パスの階層が1つ増えてしまうという事です。
これにより「./hoge.png」とか書いていると、1階層増えているので「../hoge.png」としないと本来のファイルに参照できなくなります。
formのactionにしている値も相対パスだったりすると機能しなくなる可能性がありますね。

で、解決策です。googleが末尾に「/」を追加するのを止めてくれればいいのですが、その望みは薄そうです。
なので、サーバ名を省略する書き方に変えるというのが簡単そうです。
「絶対パス」「相対パス」というのはよく聞きますが、「/」から始まる値は、サーバ名を省略してのパスとなります。
サーバ名しか省略できませんが、大抵の場合はテスト環境と本番環境ではサーバ名は違くとも、それ以下のパスは同じにしてあることがほとんどだと思います。
実際冒頭の事案ではそうでした。

まぁ、そもそもディレクトリを指す場合は末尾が「/」で終わるのが本来の書式ですから、拡張子が無いという事はディレクトリと思われても仕方が無いことなのかなぁとも思いますが。
ブラフでもいいから、サーブレットとURLをマッピングする時は拡張子を付けることをお勧めします。
そういえば、Strustなんかもデフォルトで「*.do」なんてマッピングになっていますね。

というわけで、相対パスにしてあるから安心!とはいかない場合があるというお話でした。
関連記事

コメントの投稿

非公開コメント

検索フォーム
RSSリンクの表示
カレンダー
08 | 2017/09 | 10
- - - - - 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
月別アーカイブ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。