保持网址相对?

时间:2011-08-03 15:20:37

标签: jquery asp.net html url relative-path

我们的网络应用程序有多个版本,每个版本都在根目录下的自己的虚拟文件夹中运行。在开发机器上,应用程序正在运行根目录:

http://localhost/              
http://localhost/v1
http://localhost/v2

每个应用程序都有许多文件夹和许多页面。图像都在〜/ images文件夹中:

http://localhost/images/awesome.jpg
http://localhost/v1/images/awesome.jpg
http://localhost/v2/images/awesome.jpg

http://localhost/index.aspx
http://localhost/v1/index.aspx
http://localhost/v2/index.aspx

http://localhost/foo/warble.aspx
http://localhost/v1/foo/warble.aspx
http://localhost/v2/foo/warble.aspx

现在,在我的javascript中,我需要参考其中一个图像,但它需要在该版本的文件夹中。我不一定知道哪个页面使用此Javascript。如何在图像中插入相对URL?当然,我可以使用../../images/awesome.jpg之类的东西,但这只适用于从根目录中删除两个文件夹的页面:

  • 适用于:http://localhost/v1/foo/bar/page.aspx
  • 不适用于:http://localhost/v1/foo/page.aspx

由于应用托管的版本控制方面,我无法使用绝对路径。我有什么想法可以解决这个最棘手的障碍?我正在标记jQuery,以防有一些jQuery库函数可以处理这个。

3 个答案:

答案 0 :(得分:2)

您需要将图像目录网址从服务器端代码传递到您需要的每个页面上的某个位置。考虑将其放在布局中的<head>元素内以及需要它的javascript文件之前。

<script>
  var imagePath = '<%=Page.ResolveUrl("~/images/") %>';
</script>

并使用MVC剃须刀引擎:

<script>
  var imagePath = '@Url.Content("~/images/")';
</script>

然后使用javascript文件中的全局变量imagePath链接到您的图片:

img.src = imagePath + 'image01.jpg';

另一个解决方案是使用CSS,它可以通过链接到images目录中的CSS文件并通过CSS类和ID在javascript中使用图像来处理相对路径。

答案 1 :(得分:0)

我愿意

location.origin + "/" + location.pathname.split("/")[1] + "/images/awesome.jpg"

-Sorry for the convoluted regex .-

编辑:

更好的^

答案 2 :(得分:0)

我最初的想法是你可以通过使用Http Handler或使用IIS的URL Rewrite模块来解决这个问题。您的生产网站是否会像“mysite.com/v1”等?