Protokoll relatív linkek Drupalon

Apache7 képe

Sziasztok ismét!

Nemrég https-re váltottam a weboldalam, de akad némi probléma vele Firefoxon és IE-vel is.

Ez egy friss, érvényes tanúsítvány (COMODO) tehát nem magam által aláírt tesztpéldányról van szó.

Volt némi képanyag a drupal oldalamon, ami más domainemhez tartozó képekre hivatkozott. Miután ezeket az útvonalakat átírtam Chromium alatt tökéletes a https. Javult a helyzet Firefoxon is, már "csak" a pajzs mellett a:
"A Firefox nem biztonságos tartalmat blokkolt" üzenet látható.
Firebug szerint valóban vannak abszolút hivatkozások, amik http-vel kezdődnek.
Ezeket szeretném protokoll relatív linkekre cserélni.
Milyen lehetőségem van erre Drupal alatt?

Fórum: 
csakiistvan képe

"amik http-vel kezdődnek"

Mik ezek? CSS, js hivatkozasok, vagy kepek amit a szerkeszto pakolt bele a tartalomba?

0
0

-
Features, drush, git... ne nélkülözd őket

Apache7 képe

Az ilyetén képhivatkozásokat már kigyomláltam a tartalomból, mint fentebb már írtam.
Konkrétan szerintem emiatt blokkol bizonyos tartalmat a FF és az IE:

<html class="js" xmlns:xsd="http://www.w3.org/2001/XMLSchema#" xmlns:skos="http://www.w3.org/2004/02/skos/core#" xmlns:sioct="http://rdfs.org/sioc/types#" xmlns:sioc="http://rdfs.org/sioc/ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:og="http://ogp.me/ns#" xmlns:foaf="http://xmlns.com/foaf/0.1/" xmlns:dc="http://purl.org/dc/terms/" xmlns:content="http://purl.org/rss/1.0/modules/content/" dir="ltr" version="XHTML+RDFa 1.0" xml:lang="hu" xmlns="//www.w3.org/1999/xhtml">

Egy része a bootstrap.inc-ben van.
( És már megtanultam, hogy a core-ba ne nyúljak :D )

0
0
nevergone képe

Ezek a linkek nem a webhelyedre mutatnak. Miért blokkolna ezekért bárki is? Sőt, logikusan továbbgondolva: ezek a linkek a világ temérdek Drupalt futtató webhelyén ugyanazok. Mégsem ömlik a panasz, hogy azok az oldalak a fenti kódrészlet miatt blokkolva lennének.
A hibát máshol kell keresned.

1
0
Apache7 képe

Persze, hogy nem az én webhelyemre mutatnak.
A probléma, ha biztonságos oldalról (https) nem biztonságos tartalmora (http) hivatkozol, a FF, IE beparázik és blokkolja a tartalmat.
Konkrét példa, ha mondjuk egy jquery plugint használsz a https oldaladon, és ez a plugin történetesen a google/jsapi-t használja (amire linken hivatkozol, mivel a plugin működéséhez kell a jspai) és ez történetesen http alatt van, akkor a FF automatikusan blokkolja a plugint.
Itt a Drupalos honlapomon nem jquery plugin használatáról van szó, csak próbáltam megvilágítani a problémát.

Persze lehet, hogy nem emiatt sír a FF, de valami miatt baja van. A tartalmat már átnéztem, Chromium nem is jelez már hibát.

0
0
csakiistvan képe

scriptek meg minden mas, kb erre talaltak ki ezt:

<script src="//domain.hu/sites/default/files/js/valami.js"></script>
<link href='//fonts.googleapis.com/css?family=Source+Sans+Pro:400,600,400italic&subset=latin,latin-ext' rel='stylesheet' type='text/css'>

kiveszed a http: vagy https: kerest, es ennyi megoldas. Ezt az IE is megeszi, es nem dobal warningokat.

0
0

-
Features, drush, git... ne nélkülözd őket

szantog képe

Nálam ez a csudaság csinálja ugyanezt, viszont müxik:

  1. function THEME_process_html(&$vars) {
  2. foreach (array('head', 'styles', 'scripts') as $replace) {
  3. if (!isset($vars[$replace])) {
  4. continue;
  5. }
  6.  
  7. $vars[$replace] = preg_replace('/(src|href|@import )(url\(|=)(")http(s?):/', '$1$2$3', $vars[$replace]);
  8. }
  9. }
0
0

----
Rájöttem, miért kérdezek olyan ritkán a drupal.hu-n. Amíg szedem össze az infokat a kérdéshez, mindig rájövök a megoldásra.

nevergone képe

Szia!

Adnál egy linket az oldaladra? Köszi!

0
0
Apache7 képe

googliztam kicsit, ez talán alternatíva lehet:

  1. function custom_file_url_alter(&$url) {
  2.  
  3. global $base_url;
  4.  
  5. static $relative_base_url = NULL, $relative_base_length = NULL;
  6.  
  7. $scheme = file_uri_scheme($url);
  8.  
  9. // For some things (e.g., images) hook_file_url_alter can be called multiple
  10. // times. So, we have to be sure not to alter it multiple times. If we already
  11. // are relative protocol we can just return.
  12. // Only setup the and parse this stuff once.
  13. if (!$relative_base_url || !$relative_base_length) {
  14. $relative_base_url = '//' . file_uri_target($base_url);
  15. $relative_base_length = strlen($relative_base_url);
  16. }
  17. if (!$scheme && substr($url, 0, $relative_base_length) == $relative_base_url) {
  18. return;
  19. }
  20.  
  21. // Handle the case where we have public files with the scheme public:// or
  22. // the case the relative path doesn't start with a /. Internal relative urls
  23. // have the base url prepended to them.
  24. if (!$scheme || $scheme == 'public') {
  25. // Internal Drupal paths.
  26. if (!$scheme) {
  27. $path = $url;
  28. }
  29. else {
  30. $wrapper = file_stream_wrapper_get_instance_by_scheme($scheme);
  31. $path = $wrapper->getDirectoryPath() . '/' . file_uri_target($url);
  32. }
  33.  
  34. // Clean up Windows paths.
  35. $path = str_replace('\\', '/', $path);
  36. $url = $base_url . '/' . $path;
  37. }
  38.  
  39. // Convert full URLs to relative protocol.
  40. $protocols = array('http', 'https');
  41. $scheme = file_uri_scheme($url);
  42. if ($scheme && in_array($scheme, $protocols)) {
  43. $url = '//' . file_uri_target($url);
  44. }
  45. }

Innen van:
Forrás

Ez megint csak az includes könyvtárban van, a file.inc fájlban.
Bele merjek nyúlni, hogy módosítsam?

0
0
nevergone képe

„Bele merjek nyúlni, hogy módosítsam?”

Nem, sőt erre semmi szükség sincs. Itt jön ki a Drupal egyik szépsége: a hook-rendszer.
A fenti kódrészlet ugyanis a hook_file_url_alter() hook egy implementációja, ezt láthatod a megjegyzésben szereplő „Implements hook_file_url_alter().” sorból is.
Vagyis a teendőd a következő:

  1. Készítesz két fájlt: protocol_url.info és protocol_url.module néven.
  2. A protocol_url.info fájl tartalma legyen a következő:

    1. name = Protocol URL first module
    2. description = Protocol URL first module fancy description.
    3. core = 7.x

    Hogy miket írhatsz még az info fájlba, azt itt találod: https://drupal.org/node/542202

  3. Megnyitod szerkesztésre a protocol_url.module fájlt, az elejére írsz egy ilyen PHP nyitó tag-et (idézőjelek nélkül): „<?php
    Majd új sortól kezdve bemásolod a fenti kódrészletedet.
  4. A function custom_file_url_alter(&$url) sort átírod erre: function protocol_url_file_url_alter(&$url)
    Erre azért van szükség, mert a modulod azonosítója „protocol_url” lett, lásd a fájlok neveit. Igazából bármi lehet, ami egyedi. A hook-függvények implementációjakor a függvény nevében a „hook” szó helyére a modul azonosítója kerül.
  5. Csinálsz egy sites/all/modules/custom/protocol_url könyvtárat, majd ide bemásolod a fenti két fájlt.
  6. Ha jól csináltad, akkor az admin/modules oldalon lett egy „Protocol URL first module” nevű modulod, bekapcsolod és örülsz.

Át kellett valamit írni az alaprendszerben? Nem.
Működik? Ha a fenti kódrészlet helyes (nem ellenőriztem), akkor igen.

A hook-okról itt találsz még hasznos információkat:
http://drupal.hu/kezikonyv/modulalapok
http://nevergone.hu/hu/blog/130928/drupal-hookok-es-alterek

3
0
Apache7 képe

Köszönöm a részletes leírást.

A modulok alapvető felépítésével tisztában voltam, de nem tudtam, hogy az ilyen hurok függvények önmagukban alkalmasak modulok létrehozására és így valóban nem az alaprendszert piszkáljuk. (Ami teljesen logikus.)

0
0