Yanıtlar:
Genel olarak, göreli URL'leri kullanmak en iyi yöntem olarak kabul edilir, böylece web siteniz şu anda dağıtıldığı temel URL'ye bağlı kalmaz. Örneğin, yerel ana bilgisayarda ve genel alan adınızda değişiklik yapmadan çalışabilecektir.
Mutlak URL'lerle, şema (ör. Http / https) ve ana bilgisayar adı (ör. Alanadiniz.com.tr) dahil olmak üzere URL'leri hiç yapmazsanız (yerel kaynaklar için) sürdürmek ve hata ayıklamak korkunç olacaktır.
Diyelim ki kodunuzdaki her yerde mutlak URL kullandınız <img src="http://yourdomain.com/images/example.png">
. Şimdi gideceğiniz zaman ne olacak:
İlk örnekte ne olacağı, sayfada istenen güvenli olmayan içerik hakkında uyarılar alacağınızdır. Çünkü tüm URL'leriniz http (: //alanadiniz.com/images/example.png) kullanmak için sabit kodlanmıştır. Sayfalarınızı https üzerinden çalıştırırken tarayıcı, bilgilerin sızmasını önlemek için tüm kaynakların https üzerinden yüklenmesini bekler.
İkinci örnekte, sitenizi test ortamından yayınlarken, tüm kaynakların canlı alan adınız yerine hala test alanınıza işaret ettiği anlamına gelir.
Dolayısıyla, mutlak veya göreli URL kullanılıp kullanılmayacağı hakkındaki sorunuzu yanıtlamak için: her zaman göreli URL'ler kullanın (yerel kaynaklar için).
İlk olarak, kullanabileceğimiz farklı URL türlerine bir göz atalım:
http://yourdomain.com/images/example.png
//yourdomain.com/images/example.png
/images/example.png
images/example.png
Aşağıdaki örneklerde, web sitesinin sunucuda aşağıdaki konumdan çalıştığını varsayıyorum /var/www/mywebsite
.
http://yourdomain.com/images/example.png
Yukarıdaki (mutlak) URL kaynağa erişmeye çalışır /var/www/website/images/example.png
. Bu tür bir URL, yukarıda belirtilen nedenlerle kendi web sitenizden kaynak istemekten her zaman kaçınmak istediğiniz bir şeydir . Ancak onun yeri var. Örneğin, bir web siteniz varsa http://yourdomain.com
ve harici bir alandan https üzerinden bir kaynak istemek istiyorsanız, bunu kullanmalısınız. Örn https://externalsite.com/path/to/image.png
.
//yourdomain.com/images/example.png
Bu URL kullanılan geçerli şemaya göre görecelidir ve harici kaynaklar (resimler, javascripts vb.) Dahil edilirken neredeyse her zaman kullanılmalıdır.
Bu tür bir URL'nin yaptığı, üzerinde bulunduğu sayfanın geçerli şemasını kullanmaktır. Bu, sayfada olduğunuz http://yourdomain.com
ve o sayfada, resmin <img src="//yourdomain.com/images/example.png">
URL'sinin çözeceği bir resim etiketi olduğu anlamına gelir http://yourdomain.com/images/example.png
.
Sayfada http**s**://yourdomain.com
ve o sayfada bir resim etiketi <img src="//yourdomain.com/images/example.png">
olduğunda görüntünün URL'si çözümlenir https://yourdomain.com/images/example.png
.
Bu ihtiyaç olmadığında https üzerinden yükleme kaynaklarını engellemek ve onu otomatik olarak https üzerinden emin kaynak istenen yapar edilir gerekli.
Yukarıdaki URL, sunucu tarafında önceki URL ile aynı şekilde çözümlenir:
Yukarıdaki (mutlak) URL kaynağa erişmeye çalışır
/var/www/website/images/example.png
.
/images/example.png
Yerel kaynaklar için bu kaynaklara başvurmak için tercih edilen yöntemdir. Bu, /var/www/mywebsite
web sitenizin belge köküne ( ) dayanan göreli bir URL'dir . Bu, sahip <img src="/images/example.png">
olduğunuzda her zaman çözüleceği anlamına gelir /var/www/mywebsite/images/example.png
.
Bir noktada alan adını değiştirmeye karar verirseniz, göreli olduğu için yine de çalışır.
images/example.png
Bu, bir öncekinden biraz farklı olmasına rağmen göreli bir URL'dir. Bu URL geçerli yola göre. Bunun anlamı, sitede nerede olduğunuza bağlı olarak farklı yollara çözümlenmesidir.
Örneğin, sayfadayken http://yourdomain.com
ve kullandığınızda <img src="images/example.png">
sunucuda /var/www/mywebsite/images/example.png
beklendiği gibi çözümlenir , ancak sayfadayken http://yourdomain.com/some/path
ve tam olarak aynı resim etiketini kullandığınızda aniden çözülür /var/www/mywebsite/some/path/images/example.png
.
Harici kaynaklar talep ederken, büyük olasılıkla şemaya göre bir URL kullanmak istersiniz (farklı bir şemayı zorlamak istemiyorsanız) ve yerel kaynaklarla uğraşırken belge köküne dayalı göreli URL'ler kullanmak istersiniz.
Örnek bir belge:
<!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>
Şuna bakın: 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
Mutlak bir url, "yol" kısmından önceki parçaları içerir - başka bir deyişle, şemayı ( http
in http://foo/bar/baz
) ve ana bilgisayar adını ( foo
in http://foo/bar/baz
) (ve isteğe bağlı olarak bağlantı noktası, userinfo ve bağlantı noktası) içerir.
Göreli URL'ler bir yolla başlar.
Mutlak URL'ler, mutlaktır: kaynağın konumu yalnızca URL'ye bakarak çözülebilir. Göreli bir url bir anlamda eksiktir: çözmek için şemaya ve ana makine adına ihtiyacınız vardır ve bunlar genellikle geçerli bağlamdan alınır. Örneğin, adresindeki bir web sayfasında
http://myhost/mypath/myresource1.html
böyle bir link koyabilirsin
<a href="pages/page1">click me</a>
Gelen href
bağlantının özniteliği, göreceli bir url kullanılan s ve tıklandığında ise, onu takip etmek için çözülmesi gerekmektedir. Bu durumda, mevcut bağlam
http://myhost/mypath/myresource1.html
şema, ana makine adı ve bunların giden yolun böylece alınır ve başına ilave pages/page1
verimli,
http://myhost/mypath/pages/page1
Bağlantı şu olsaydı:
<a href="/pages/page1">click me</a>
( /
url'nin başlangıcında görünmesini unutmayın ), daha sonra şu şekilde çözülmüş olurdu:
http://myhost/pages/page1
çünkü /
satır aralığı ana bilgisayarın kök dizinini belirtir.
Bir web uygulamasında, uygulamanıza ait tüm kaynaklar için göreli URL'ler kullanmanızı öneririm. Bu şekilde, sayfaların konumunu değiştirirseniz, her şey çalışmaya devam eder. Herhangi bir harici kaynak (tamamen uygulamanızın dışındaki sayfalar olabilir, ancak bir içerik dağıtım ağı üzerinden ilettiğiniz statik içerik) her zaman mutlak URL'leri kullanmaya yönlendirilmelidir: yoksa, bunları bulmanın bir yolu yoktur, çünkü bunlar farklı bir sunucuda bulunur.
//example.com/…
, ?foobar
Ve #foobar
aynı zamanda göreli URL'ler ve (için ok iyi URL yolu ile başlamayın ?foobar
bunu bir ile başlıyor diyebiliriz boş yolu).
//example.com/…
URL'ler göreli olarak adlandırılıyor mu? bu benim için yeni.
Dosyaları http://site.ru/shop klasöründe olan bir alt site oluşturduğumuzu varsayalım .
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/"
Link from home page to product page
href="t-shirts/t-shirt-life-is-good/"
Link from product page to home page
href="../../"
Göreli URL mutlak URL'den daha kısa görünse de, bir bağlantı sitenin herhangi bir sayfasında değişmeden kullanılabileceğinden mutlak URL'ler daha tercih edilir.
İki uç durumu ele aldık: "kesinlikle" mutlak ve "kesinlikle" göreli URL'ler. Fakat bu dünyada her şey görecelidir. Bu, URL'ler için de geçerlidir. Mutlak URL hakkında her söylediğinizde, neye göre daima belirtmeniz gerekir.
Link to home page
href="//sites.ru/shop/"
Link to product page
href="//sites.ru/shop/t-shirts/t-shirt-life-is-good/"
Google bu URL'yi önerir. Ancak şimdi, http: // ve https: // 'nin farklı siteler olduğu düşünülmektedir.
Yani alan adının kök klasörüne göre.
Link to home page
href="/shop/"
Link to product page
href="/shop/t-shirts/t-shirt-life-is-good/"
Tüm sayfalar aynı alan adındaysa iyi bir seçimdir. Sitenizi başka bir alana taşıdığınızda, URL'lerde alan adının toplu olarak değiştirilmesine gerek yoktur.
<base> etiketi, göreli tüm bağlantılara ve bağlantılara otomatik olarak eklenen temel URL'yi belirtir. Temel etiket mutlak bağlantıları etkilemez. Temel URL olarak ana sayfayı belirtiriz: <base href = "http://sites.ru/shop/">.
Link to home page
href=""
Link to product page
href="t-shirts/t-shirt-life-is-good/"
Artık sitenizi yalnızca herhangi bir alana değil, herhangi bir alt klasöre taşıyabilirsiniz. URL'lerin göreli gibi görünse de, aslında mutlak olduklarını unutmayın. Özellikle çapalara dikkat edin. Geçerli sayfada gezinmek için href = "t-shirt / t-shirt-life-is-good / # comments" değil href = "# comments" yazmalıyız. İkincisi ana sayfaya atılacaktır.
Dahili bağlantılar için temel göreli URL'ler kullanıyorum (5). Harici bağlantılar ve bültenler için mutlak URL'ler kullanıyorum (1).
Açıkça tartışılması gereken gerçekten üç tür vardır. Uygulamada, URL'lerin daha düşük bir düzeyde ele alınmasına rağmen soyutlanmıştır ve geliştiricilerin tek bir URL yazmadan tüm yaşamlarını sürdürebileceklerini söyleyebilirim.
Mutlak URL'ler, kodunuzu protokole ve alana bağlar. Bu dinamik URL'lerle aşılabilir.
<a href=“https://dev.example.com/a.html?q=”>https://dev.example.com/a.html?q=</a>
Mutlak Artıları:
Kontrol - Alt alan ve protokol kontrol edilebilir. Belirsiz bir alt alandan giren kişiler uygun alt alana yönlendirilir. Güvenli ve güvenli olmayan arasında uygun şekilde ileri geri atlayabilirsiniz.
Yapılandırılabilir - Geliştiriciler işleri mutlak olmayı severler. Mutlak URL'ler kullanırken düzgün algoritmalar tasarlayabilirsiniz. URL'ler, tek bir yapılandırma dosyasında tek bir değişiklikle site genelinde güncellenebilecek şekilde yapılandırılabilir.
Basiret - Sitenizi kazıyan kişileri arayabilir veya bazı ekstra harici bağlantılar alabilirsiniz.
Kök Göreli URL'ler, kodunuzu temel URL'ye bağlar. Bu, dinamik URL'ler ve / veya temel etiketlerle aşılabilir .
<a href=“/index.php?q=”>.example.com/index.php?q=</a>
Kök Göreceli Artıları:
Göreli URL'ler kodunuzu dizin yapısına bağlar. Bunun üstesinden gelmenin bir yolu yok. Göreli URL'ler yalnızca dosya dizinlerinde geçiş dizinlerinde veya bir görev için kısayol olarak kullanışlıdır.
<a href=“index.php?q=”>index.php?q=</a>
<link src=“../.././../css/default.css” />
Göreceli Eksileri:
KONFÜZYON - Bu kaç nokta? kaç klasör var? Dosya nerede? Neden çalışmıyor?
BAKIM - Bir dosya yanlışlıkla kaynakların yüklenmesini bırakırsa, bağlantılar kullanıcıyı yanlış sayfalara gönderirse, form verileri yanlış sayfaya gönderilebilir. Bir dosyanın taşınması GEREKİRse, yüklemeyi bırakacak tüm kaynaklar ve hatalı olacak tüm bağlantıların güncellenmesi gerekir.
ÖLÇEKLENMİYOR - Web sayfaları daha karmaşık hale geldiğinde ve görünümler birden fazla sayfada yeniden kullanılmaya başladığında, göreli bağlantılar dahil edildikleri dosyaya göre olacaktır. Her sayfada olacak bir HTML HTML gezinme snippet'iniz varsa, göreli birçok farklı yere göreceli olacaktır. İnsanların bir şablon oluşturmaya başladığında fark ettikleri ilk şey, URL'leri yönetmek için bir yola ihtiyaç duymalarıdır.
BİLGİSAYAR - Tarayıcınız tarafından uygulanır (umarım RFC'ye göre). Bkz. RFC3986, bölüm 5 .
Oops! - Hatalar veya yazım hataları örümcek tuzaklarına neden olabilir.
Geliştiriciler, burada tartışılmak üzere URL yazmayı bıraktılar. Tüm istekler bir web sitesinin dizin dosyası içindir ve bir sorgu dizesi, yani bir rota içerir. Rota, uygulamanıza oluşturulacak içeriği bildiren bir mini URL olarak düşünülebilir.
<a href="<?=Route::url('named_url', array('first' => 'my', 'last' => 'whacky'))?>">
http://dev.example.com/index.php/my:whacky:url
</a>
Artıları:
Çoğu insan projelerinde her üç şekli de bir şekilde kullanır. Anahtar, onları anlamak ve görev için en uygun olanı seçmek.
Web sitenizde kullanım içinse, web sitesini başka bir alan adına taşımanız veya yalnızca yerel olarak hata ayıklamanız gerekirse, göreli URL'yi kullanmak daha iyi bir uygulamadır.
Stackoverflow'un ne yaptığına bir göz atın (firefox'ta ctrl + U):
<a href="/users/recent/90691"> // Link to an internal element
Bazı durumlarda mutlak URL'ler kullanırlar:
<link rel="stylesheet" href="http://sstatic.net/so/all.css?v=5934">
... ama bu sadece hızı artırmak için en iyi yöntem. Sizin durumunuzda, böyle bir şey yaptığınıza benzemiyor, bu yüzden endişelenmeyeceğim.
Burada çoğunluğa katılmam gerekecek.
Özellikle projeniz birkaç geliştiriciyle (ya da sadece kendiniz) küçükse, hızlı bir şekilde çalışmaya başlamak ve kutunun dışında düşünmek istemediğinizde göreli URL şemasının "iyi" olduğunu düşünüyorum.
Bununla birlikte, her zaman etki alanlarını ve protokolleri değiştirdiğiniz büyük, yağlı sistemler üzerinde çalışmaya başladığınızda, daha zarif bir yaklaşımın uygun olduğuna inanıyorum.
Mutlak ve göreli URL'leri özünde karşılaştırdığınızda, Mutlak kazanır. Neden? Çünkü hiç kırılmayacak. Hiç. Mutlak bir URL tam olarak söylediği şeydir. Yakalama, mutlak URL'lerinizi MAINTAIN yapmanız gerektiğidir.
Mutlak URL bağlantısına zayıf yaklaşım aslında tüm URL'yi kodlamak zordur. Harika bir fikir değil ve muhtemelen insanların neden onları korumak için tehlikeli / kötü / sinir bozucu olarak gördüklerinin suçlusu. Daha iyi bir yaklaşım, kendinize kullanımı kolay bir URL oluşturucu yazmaktır. Bunlar yazmak kolaydır ve inanılmaz derecede güçlü olabilir - protokolünüzü otomatik olarak algılar, yapılandırması kolaydır (kelimenin tam anlamıyla URL'yi tüm uygulama için bir kez ayarlayın), vb. Ve alan adınızı tek başına enjekte eder. Bununla ilgili güzel bir şey: Göreli URL'leri kullanarak kodlamaya devam edersiniz ve çalışma zamanında uygulama URL'lerinizi tam olarak mutlak olarak ekler. Muhteşem.
Tüm modern sitelerin pratik olarak bir çeşit dinamik arka uç kullandığını gören bu sitenin bunu yapmak en iyisidir. Mutlak URL'ler sizi nereye yönlendirdiklerinden emin olmaktan daha fazlasını yapar - ayrıca SEO performansını artırabilirler.
Mutlak URL'lerin bir şekilde sayfanın yükleme süresini değiştireceği argümanının bir efsane olduğunu ekleyebilirim. Alan adınız birkaç bayttan daha ağırsa ve 1980'lerde çevirmeli modem kullanıyorsanız, emin olun. Ama artık durum böyle değil. https://stackoverflow.com/ 25 bayt, sitenin gezinme alanı için kullandıkları "topbar-sprite.png" dosyası 9+ kb ağırlığındadır. Bu, ek URL verilerinin hareketli grafik dosyasına kıyasla yüklenen verilerin% 0,2'si olduğu ve bu dosyanın büyük bir performans isabeti olarak kabul edilmediği anlamına gelir.
Bu büyük, optimize edilmemiş, tam sayfa arka plan görüntüsünün yükleme sürelerinizi yavaşlatma olasılığı daha yüksektir.
Göreli URL'lerin neden kullanılmaması gerektiğiyle ilgili ilginç bir yayın burada: http://yoast.com/relative-urls-issues/
Örneğin, akrabalarda ortaya çıkabilecek bir sorun, bazen sunucu eşlemelerinin (büyük, dağınık projelerde olduğunu unutmayın) dosya adlarıyla hizalanmaması ve geliştiricinin, doğru. Bunu bugün üzerinde olduğum bir projede gördüm ve tüm sayfayı indirdi.
Ya da belki bir geliştirici bir işaretçiyi değiştirmeyi unuttu ve ani bir google tüm test ortamınızı dizine ekledi. Hata! Yinelenen içerik (SEO için kötü!).
Mutlaklar tehlikeli olabilir, ancak düzgün bir şekilde ve yapınızı bozmayacak şekilde kullanıldığında daha güvenilir oldukları kanıtlanmıştır. Wordpress url jeneratörünün süper harika olmasının birkaç nedenini veren yukarıdaki makaleye bakın.
:)
/
temel yola bağlanmak için mi kullanıyorsunuz ? yani /products/wallets/thing.html
olarak karşıt thing.html
aksinehttp://www.myshop.com/products/wallets/thing.html
echo Route::url('route_name')
HTTPS üzerinden yapma seçeneği ile site URL'sini ve rota bilgilerini kullanarak mutlak bir URL oluşturmak için kullanabileceğiniz Kohana gibi Rotaları seviyorum .
Çoğu durumda, göreli URL'ler gitmenin bir yoludur, bunlar doğası gereği taşınabilirdir; bu, sitenizi kaldırmak ve anında çalışacak başka bir yere koymak isterseniz, muhtemelen hata ayıklama saatlerini azaltmak anlamına gelir.
Mutlak ve göreli URL'ler hakkında oldukça iyi bir makale var, bir göz atın .
URL şeması ve şeması belirli bir kısmına (ile başlar o URL http://
, https://
, ftp://
vs.) mutlak bir URL.
Diğer herhangi bir URL göreli bir URL'dir ve göreli URL'nin, aksi belirtilmedikçe başvurunun kullanıldığı kaynağın URL'si olan çözümlendiği (ve dolayısıyla bağlı olduğu) bir temel URL'ye gereksinimi vardır.
Göreli URL'leri çözme örnekleri için RFC 2396 - Ek C'ye göz atın .
Diyelim ki bir siteniz var www.yourserver.com. Web belgelerinin kök dizininde bir resim alt dizininiz ve myimage.jpg dosyanız var.
Mutlak bir URL, dokümanın tam yerini tanımlar, örneğin:
http://www.yourserver.com/images/myimage.jpg
Göreli bir URL, örneğin, resminizin bulunduğu kök web dizininde bulunduğunuzda , geçerli dizine göre konumu tanımlar :
images/myimage.jpg
(bu kök dizine göre)
Mümkün olan yerlerde her zaman göreli URL'ler kullanmalısınız. Siteyi www.anotherserver.com adresine taşırsanız, www.yourserver.com adresini işaret eden tüm mutlak URL'leri güncellemeniz gerekir; göreli olanlar yalnızca olduğu gibi çalışmaya devam eder.
Göreli URI çözünürlüğünü destekleyen her sistem için hem göreli hem de mutlak URI'ler aynı amaca hizmet eder: referans verme. Ve birbirlerinin yerine kullanılabilirler. Böylece her durumda farklı karar verebilirsiniz . Teknik olarak, aynı referansı sağlarlar .
Kesin olmak gerekirse, her göreli URI ile zaten mutlak bir URI vardır. Ve bu, göreli URI'nin çözümlendiği temel URI'dir. Dolayısıyla, göreli bir URI aslında mutlak URI'lerin üstünde bir özelliktir.
Ve bu yüzden göreceli URI'lerle tek başına mutlak bir URI'de olduğu gibi daha fazlasını yapabilirsiniz - bu özellikle mutlak URI'lere kıyasla bakımı esnek olmayan statik web siteleri için özellikle önemlidir.
Göreli URI çözünürlüğünün bu olumlu etkileri, dinamik web uygulaması geliştirme için de kullanılabilir. Mutlak URI'lerin getirdiği esneklik, dinamik bir ortamda başa çıkmak için daha kolaydır, bu nedenle URI çözünürlüğü ve bunun nasıl doğru şekilde uygulanacağı ve yönetileceği konusunda emin olmayan bazı geliştiriciler için (her zaman kolay değildir) genellikle mutlak kullanmayı tercih ederler. Bir web sitesinin dinamik bir kısmındaki URI'ler, diğer esnek özellikler (ör. URI önekini içeren yapılandırma değişkeni) sunabildikleri için, esneklik etrafında çalışabilirler.
Peki mutlak URI'ları kullanmanın yararı nedir? Teknik olarak yok, ama diyebilirim ki: Göreli URI'ler daha karmaşıktır çünkü mutlak temel URI'ye karşı çözülmeleri gerekir. Çözünürlük yıllardan beri kesin olarak tanımlanmış olsa bile, URI çözümlemesinde hata olan bir istemcinin üzerinden geçebilirsiniz. Mutlak URI'ler herhangi bir çözüme ihtiyaç duymadığından, mutlak URI'lerin kullanımının göreceli URI çözünürlüğüyle hatalı istemci davranışına girme riski yoktur. Peki bu risk aslında ne kadar yüksek? Çok nadir. Yalnızca göreli URI çözünürlüğü ile ilgili bir sorunu olan bir İnternet tarayıcısı biliyorum. Ve bu genel olarak değil, sadece çok (belirsiz) bir olaydı.
HTTP istemcisinin (tarayıcı) yanında, köprü metni belgelerinin veya kodunun yazarı için de daha karmaşıktır. Burada mutlak URI'nin, testlerin daha kolay olmasının avantajı vardır, çünkü tarayıcınızın adres çubuğuna olduğu gibi girebilirsiniz. Ancak, yalnızca bir saatlik işiniz değilse, mutlak ve göreli URI işlemeyi gerçekten anlamanız daha sık yararlanır, böylece göreli bağlamanın avantajlarından yararlanabilirsiniz.