Pee*_*Haa 212
如果绝对URL是指包括scheme(例如http/https)的URL,而主机名(例如yourdomain.com)不会这样做(对于本地资源),因为维护和调试会很糟糕.
假设您在代码中的所有位置都使用了绝对URL <img src="http://yourdomain.com/images/example.png">.现在,当你要去的时候会发生什么:
在第一个示例中,将发生的是您将收到有关页面上请求的不安全内容的警告.因为您的所有网址都是硬编码的,所以使用http(://yourdomain.com/images/example.png).当通过http运行您的页面时,浏览器期望通过https加载所有资源以防止泄露信息.
在第二个示例中,当您的网站从测试环境中直播时,这意味着所有资源仍然指向您的测试域而不是您的实时域.
因此,要回答有关是使用绝对URL还是相对URL的问题:始终使用相对URL(对于本地资源).
首先让我们看一下我们可以使用的不同URL:
http://yourdomain.com/images/example.png//yourdomain.com/images/example.png/images/example.pngimages/example.png在下面的示例中,我假设网站从服务器上的以下位置运行/var/www/mywebsite.
http://yourdomain.com/images/example.png
上述(绝对)URL尝试访问资源/var/www/website/images/example.png.出于上述原因,您始终希望避免这种类型的URL 从您自己的网站请求资源.但它确实有它的位置.例如,如果您有一个网站,http://yourdomain.com并且想要通过http从外部域请求资源,则应使用此方法.例如https://externalsite.com/path/to/image.png.
//yourdomain.com/images/example.png
此URL是基于当前使用的方案的相对URL,并且在包含外部资源(图像,javascripts等)时几乎总是应该使用.
这种类型的URL的作用是使用它所在页面的当前方案.这意味着您在页面http://yourdomain.com上并且该页面上是图像<img src="//yourdomain.com/images/example.png">的URL将解析的图像标记http://yourdomain.com/images/example.png.
当您进入页面http**s**://yourdomain.com并且该页面上是图像标记时<img src="//yourdomain.com/images/example.png">,图像的URL将被解析https://yourdomain.com/images/example.png.
这防止加载资源通过HTTPS是不需要的时候,并自动确保被请求的资源通过HTTPS时,它是必要的.
上述URL在服务器端以与先前URL相同的方式解析:
上述(绝对)URL尝试访问资源
/var/www/website/images/example.png.
/images/example.png
对于本地资源,这是引用它们的首选方式.这是基于/var/www/mywebsite您网站的文档root()的相对URL .这意味着当你拥有<img src="/images/example.png">它将始终解决/var/www/mywebsite/images/example.png.
如果在某些时候您决定切换域,它仍然可以工作,因为它是相对的.
images/example.png
这也是一个相对URL,虽然与前一个有点不同.此URL与当前路径相关.这意味着它将根据您在站点中的位置解析到不同的路径.
例如,当您在页面上http://yourdomain.com并且使用<img src="images/example.png">它时,将在服务器上/var/www/mywebsite/images/example.png按预期解析,但是当您在页面上http://yourdomain.com/some/path并使用完全相同的图像标记时,它会突然解决/var/www/mywebsite/some/path/images/example.png.
在请求外部资源时,您很可能希望使用相对于方案的URL(除非您要强制使用其他方案),并且在处理本地资源时,您希望使用基于文档根目录的相对URL.
示例文档:
<!DOCTYPE html>
<html>
<head>
<title>Example</title>
<link href='//fonts.googleapis.com/css?family=Lato:300italic,700italic,300,700' rel='stylesheet' type='text/css'>
<link href="/style/style.css" rel="stylesheet" type="text/css" media="screen"></style>
</head>
<body>
<img src="/images/some/localimage.png" alt="">
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js" ></script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
Dan*_*llo 177
通常,最佳做法是使用相对URL,这样您的网站就不会绑定到当前部署的基本URL.例如,它可以在localhost上工作,也可以在公共域上工作,无需修改.
Rol*_*man 62
请参阅:http://en.wikipedia.org/wiki/URI_scheme#Generic_syntax
foo://username:password@example.com:8042/over/there/index.dtb;type=animal?name=ferret#nose
\ / \________________/\_________/ \__/ \___/ \_/ \_________/ \_________/ \__/
| | | | | | | | |
| userinfo hostname port | | parameter query fragment
| \_______________________________/ \_____________|____|____________/
scheme | | | |
| authority |path|
| | |
| path interpretable as filename
| ___________|____________ |
/ \ / \ |
urn:example:animal:ferret:nose interpretable as extension
Run Code Online (Sandbox Code Playgroud)
绝对URL包括部件的"路径"部分之前-换句话说,它包括计划(http在http://foo/bar/baz)和主机名(所述foo中http://foo/bar/baz)(和任选的端口,用户信息和端口).
相对网址以路径开头.
绝对的网址是绝对的:资源的位置只能在网址本身查找.相对URL在某种意义上是不完整的:要解决它,您需要方案和主机名,这些通常取自当前上下文.例如,在网页中
http://myhost/mypath/myresource1.html
Run Code Online (Sandbox Code Playgroud)
你可以把这样的链接
<a href="pages/page1">click me</a>
Run Code Online (Sandbox Code Playgroud)
在href链接的属性中,使用了相对URL,如果单击它,则必须解析它才能跟随它.在这种情况下,当前的上下文是
http://myhost/mypath/myresource1.html
Run Code Online (Sandbox Code Playgroud)
所以这些的模式,主机名和前导路径都被采用并预先放置pages/page1,屈服
http://myhost/mypath/pages/page1
Run Code Online (Sandbox Code Playgroud)
如果链接是:
<a href="/pages/page1">click me</a>
Run Code Online (Sandbox Code Playgroud)
(注意/出现在网址的开头)然后它会被解决为
http://myhost/pages/page1
Run Code Online (Sandbox Code Playgroud)
因为前导/表示主机的根目录.
在Web应用程序中,我建议对属于您的应用程序的所有资源使用相对URL.这样,如果您更改页面的位置,一切都将继续工作.任何外部资源(可能是完全在您的应用程序之外的页面,也是您通过内容传送网络提供的静态内容)应始终使用绝对URL指向:如果您不这样做,则根本无法找到它们,因为它们驻留在不同的服务器上.
Vla*_*nov 41
假设我们正在创建一个子网站,其文件位于http://site.ru/shop文件夹中.
Link to home page
href="http://sites.ru/shop/"
Link to the product page
href="http://sites.ru/shop/t-shirts/t-shirt-life-is-good/"
Run Code Online (Sandbox Code Playgroud)
Link from home page to product page
href="t-shirts/t-shirt-life-is-good/"
Link from product page to home page
href="../../"
Run Code Online (Sandbox Code Playgroud)
虽然相对URL看起来比绝对URL短,但绝对URL更可取,因为链接可以在站点的任何页面上不加改变地使用.
我们考虑了两种极端情况:"绝对"绝对和"绝对"相对URL.但在这个世界上,一切都是相对的.这也适用于URL.每当你说绝对URL时,你应该总是指定相对于什么.
Link to home page
href="//sites.ru/shop/"
Link to product page
href="//sites.ru/shop/t-shirts/t-shirt-life-is-good/"
Run Code Online (Sandbox Code Playgroud)
Google建议使用此类网址.但是,现在通常认为http://和https://是不同的站点.
即相对于域的根文件夹.
Link to home page
href="/shop/"
Link to product page
href="/shop/t-shirts/t-shirt-life-is-good/"
Run Code Online (Sandbox Code Playgroud)
如果所有页面都在同一个域中,那么这是一个不错的选择.当您将站点移动到另一个域时,您不必在URL中大量替换域名.
标签<base>指定基本URL,它会自动添加到所有相关链接和锚点.基本标记不会影响绝对链接.作为基本URL,我们将指定主页:<base href ="http://sites.ru/shop/">.
Link to home page
href=""
Link to product page
href="t-shirts/t-shirt-life-is-good/"
Run Code Online (Sandbox Code Playgroud)
现在,您不仅可以将站点移动到任何域,还可以移动到任何子文件夹中.请记住,尽管URL看起来像是相对的,但实际上它们是绝对的.特别要注意锚点.要在当前页面中导航,我们必须编写href ="t-shirts/t-shirt-life-is-good /#comments"而不是href ="#comments".后者将扔在主页上.
对于内部链接,我使用基本相对URL(5).对于外部链接和新闻简报,我使用绝对URL(1).
J.M*_*ney 24
实际上应该明确讨论三种类型.实际上虽然URL被抽象为在较低级别处理,但我甚至可以说开发人员可以完成整个生命而无需手动编写单个URL.
绝对URL将您的代码与协议和域绑定在一起.这可以通过动态URL来克服.
<a href=“https://dev.example.com/a.html?q=”>https://dev.example.com/a.html?q=</a>
Run Code Online (Sandbox Code Playgroud)
绝对优点:
控制 - 可以控制子域和协议.通过一个不起眼的子域进入的人将被汇入正确的子域.您可以根据需要在安全和非安全之间来回跳转.
可配置 - 开发人员喜欢绝对的东西.使用绝对URL时,您可以设计整洁的算法.可以对URL进行配置,以便可以在单个配置文件中进行单个更改,从而在站点范围内更新URL.
千里眼 - 您可以搜索抓住您网站的人,或者搜索一些额外的外部链接.
根相对URL将您的代码绑定到基本URL.这可以通过动态URL和/或基本标记来克服.
<a href=“/index.php?q=”>.example.com/index.php?q=</a>
Run Code Online (Sandbox Code Playgroud)
根相对优点:
相对URL将您的代码绑定到目录结构.没有办法克服这一点.相对URL仅在文件系统中用于遍历目录或作为琐事任务的快捷方式.
<a href=“index.php?q=”>index.php?q=</a>
<link src=“../.././../css/default.css” />
Run Code Online (Sandbox Code Playgroud)
相对缺点:
混淆 - 那是多少点?这是多少个文件夹?文件在哪里?为什么不工作?
维护 - 如果文件被意外移动,资源退出加载,链接会将用户发送到错误的页面,表单数据可能会被发送到错误的页面.如果要移动文件NEEDS,则需要更新所有要退出加载的资源以及所有不正确的链接.
不进行扩展 - 当网页变得更加复杂并且视图开始在多个页面中重用时,相对链接将相对于它们被包含在的文件中.如果你有一个HTML的导航片段将在每个页面上,那么亲戚将相对于许多不同的地方.人们在开始创建模板时首先意识到,他们需要一种管理URL的方法.
COMPUTED - 它们由您的浏览器实现(希望根据RFC).请参阅RFC3986中的第5章.
OOPS! - 错误或拼写错误可能导致蜘蛛陷阱.
开发人员已经停止在此处讨论的意义上编写URL.所有请求都是针对网站的索引文件,并包含查询字符串,即路径.该路由可以被视为一个迷你URL,告诉您的应用程序要生成的内容.
<a href="<?=Route::url('named_url', array('first' => 'my', 'last' => 'whacky'))?>">
http://dev.example.com/index.php/my:whacky:url
</a>
Run Code Online (Sandbox Code Playgroud)
路线优点:
大多数人会以某种方式在他们的项目中使用所有三种形式.关键是要了解它们并选择最适合该任务的那个.
如果它是在您的网站中使用,最好使用相对URL,如果您需要将网站移动到另一个域名或只是本地调试,您可以.
看一下stackoverflow正在做什么(在Firefox中使用ctrl + U):
<a href="/users/recent/90691"> // Link to an internal element
Run Code Online (Sandbox Code Playgroud)
在某些情况下,他们使用绝对网址:
<link rel="stylesheet" href="http://sstatic.net/so/all.css?v=5934">
Run Code Online (Sandbox Code Playgroud)
......但这只是提高速度的最佳做法.在你的情况下,它看起来不像你做的那样,所以我不担心它.
我不得不在这里不同意多数人的意见.
我认为相对URL方案是"很好",当你想快速启动并运行时,不要在盒子外面思考,特别是如果你的项目很少,开发人员很少(或者只是你自己).
但是,一旦你开始处理大型,脂肪系统,你一直在切换域和协议,我相信一个更优雅的方法是有序的.
当您从本质上比较绝对和相对URL时,Absolute获胜.为什么?因为它永远不会破裂.永远.绝对URL正是它所说的.问题在于您必须保留绝对URL.
绝对URL链接的弱方法实际上是对整个URL进行硬编码.这不是一个好主意,也可能是为什么人们认为它们是危险/邪恶/烦人维持的罪魁祸首.更好的方法是为自己编写一个易于使用的URL生成器.这些都很容易编写,并且可以非常强大 - 自动检测您的协议,易于配置(字面上为整个应用程序设置一次网址)等,它会自动注入您的域名.关于这一点的好处:您继续使用相对URL进行编码,并且在运行时,应用程序会立即将您的URL作为完整绝对值插入.真棒.
看到几乎所有现代网站都使用某种动态后端,所以这个网站的最佳利益就是这样做.绝对URL不仅可以让您确定他们指向的位置,还可以提高SEO性能.
我可能会补充一点,绝对URL以某种方式改变页面加载时间的论点是一个神话.如果您的域重量超过几个字节并且您在20世纪80年代使用的是拨号调制解调器,那么肯定.但事实并非如此.https://stackoverflow.com/是25个字节,而他们用于站点导航区域的"topbar-sprite.png"文件的重量为9+ kb.这意味着与精灵文件相比,额外的URL数据是加载数据的.2%,并且该文件甚至不被视为性能损失.
这个大而未经优化的整页背景图像更有可能减慢加载时间.
有关为何不应使用相对URL的有趣帖子如下:http: //yoast.com/relative-urls-issues/
例如,亲戚可能会遇到的一个问题是,有时服务器映射(请注意大型,混乱的项目)不与文件名对齐,开发人员可能会假设相关URL不是真正.我今天刚看到我正在进行的一个项目,它整个页面都缩小了.
或者,开发人员可能忘记切换指针,并且突然谷歌将整个测试环境编入索引.哎呀 - 重复内容(对SEO不好!).
绝对可能是危险的,但如果使用得当并且不能破坏你的构造,它们被证明更可靠.看看上面的文章,它给出了为什么Wordpress url生成器超级棒的原因.
:)
| 归档时间: |
|
| 查看次数: |
258386 次 |
| 最近记录: |