2012-12-05 80 views
4

我有一個網站,可以在httphttps協議中查看,這裏的問題是鏈接和資產必須反映網站正在瀏覽的協議。不包括協議的書寫鏈接

一個解決方案是使用相對鏈接,但由於特殊原因,我不能使用相對鏈接,作爲結果,我不得不尋找替代...

我最近了解到,你可以寫一個到現在爲止,我一直在使用以下

<a href="//www.example.net/test/">Test</a> 

<?php 

    // Get the current protocol 
    $_PROTOCOL = $_SERVER['HTTPS']=='on' ? 'https://' : 'http://'; 

?> 

<a href="<?php echo $_PROTOCOL; ?>www.example.net/test/">Test</a> 

雖然第一溶液中以便像這樣的鏈接使用當前的協議作品,我最近才發現它並不熟悉它是如何工作的以及它是否可靠。我意識到,舊版瀏覽器可能不喜歡它,但這並不妨礙我,因爲它只是非常老的瀏覽器(顯然)。

當我想爲我的網站的一個站點地圖,網址是寫的很奇怪,像這樣:

http://beta.example.net///venue/ 

而不是

http://beta.example.net/venue/ 

這是爲什麼?這是因爲我使用的鏈接?

儘管需要大量的代碼,我的原始(PHP)解決方案是否更好?

+1

最好使用「//example.net/test」。即使Google的CDN使用這種格式 - https://developers.google.com/speed/libraries/devguide#jquery,因此您可以確保它適用於所有瀏覽器 – skyronic

+1

您的php解決方案有什麼問題?我只會改變'PROTOCOL'而不是變量,那麼你可以在你的站點的不同範圍內使用它''define(「PROTOCOL」,$ _ SERVER [「HTTPS」 ] ==「on」?「https」:「http」);' –

+0

@YaronUliel我的PHP解決方案沒有問題,但HTML解決方案更簡單,所需代碼更少。我不想爲我的網站中的每個鏈接寫'echo $ _PROTOCOL'!關於使用常量的建議雖然很好,但是+1 :-) –

回答

3

您可以在任何想要使用常規URL的地方使用「//example.net」,它是根據標準§4.2的格式。 RFC 3986.


但是,如果你仍然想改變一個URL的方案,以清潔的方式,你可以使用http_build_url

http://php.net/manual/en/function.http-build-url.php

這樣的:

http_build_url("http://yoururl.org", array('scheme'=>'https')); // changes to https:// 
+0

你認爲我應該爲我網站上的每一個鏈接做到這一點!!!!!! ??? –

+0

我只是告訴你如何以一種簡單的方式改變方案,比做一個<?php echo $ _PROTOCOL;?>更省力。你可以使用「//example.net」就好了,btw – skyronic

+0

謝謝,請你可以修改你的答案,以包含有關'// example.net'的信息,因爲這是我感興趣的:-) –

0

站點地圖中的錯誤鏈接是因爲生成器錯誤。最好的解決方案是更新站點地圖生成器,使其像應該那樣工作。簡單的解決方案是使用$協議。

+0

編輯網站地圖生成的網址不是問題,會花費我一秒。我只是想知道使用'PHP'還是HTML方法更好? –

0

您沒有提供能夠重現您所描述的問題並顯示額外斜槓的鏈接的代碼。我的猜測是你正在使用的代碼試圖組裝整個URI,並且在你要連接的部分有尾隨/前導斜線。

不保證將$ _SERVER ['HTTPS']變量設置爲「on」,只是爲了讓您知道已定義的行爲。它只是設置爲非錯誤值according to the manual,但這不應該成爲您在此處提供的代碼中的問題。

使用協議相對URL確實比讓PHP做了額外的工作來重建每個請求的URI並且也容易出錯是更可取的。我建議使用協議的相對URL,如果您覺得他們是需要的,但一般來說建議您從頭開始構建您的站點,或者使用HTTPS或不使用HTTPS。協議相對URL可能仍會導致某些瀏覽器(例如IE)發出警告或通知用戶該頁面的SSL已損壞。

當您需要安全傳輸時,您希望始終檢查這些內容並進行徹底測試。不小心滑入http://foobar.com/img.jpg或無意中通過HTTP而不是HTTPS發送AJAX請求,並且該頁面的SLL圖標突然在用戶的瀏覽器中被破壞。

+0

代碼是那裏產生的奇怪的鏈接在那裏! 'Test'就這麼簡單。這很可能是站點地圖生成器已損壞。我不認爲服務器變量是可靠的,這是我問這個問題的原因之一 –

+0

該代碼本身不會導致你描述的結果,不。你的問題很可能在其他地方出現。 – Sherif

+0

親自試一試,請訪問http://rapid.searchmetrics.com/seo-tools/extras/sitemap-generator,25.html,result#r,然後輸入帶有這些鏈接的網址!這也可能與'.htaccess'重寫 –