web-dev-qa-db-fra.com

Comment rediriger vers la feuille de style après la commutation des noms de domaine?

Nous avons commuté les noms de domaine d'exemple.com à l'exemple.org. J'ai mis en place une redirection générale 301 pour toutes les URL du site dans le fichier .htaccess sur le serveur Exemple.com et toutes les pages redirigent bien.

Cependant, le lien vers la feuille de style sur des centaines de pages anciennes ne redirige pas, de sorte que les pages se présentent sans formatage de CSS.

Voici le code dans l'en-tête de chaque page reliant la feuille de style.

<link rel="stylesheet" href="http://www.example.com/Amazon/styles-site.css" type="text/css" />

Si vous collez http://www.example.com/Amazon/styles-site.css Dans un navigateur, il redirige vers l'URL appropriée https://example.org/Amazon/styles-site.css.

Qu'est-ce que je dois faire pour obtenir l'URL de styles de styles anciens à rediriger vers la nouvelle URL?

Merci pour toute information que vous pouvez fournir.

Le fichier .htaccess sur le serveur d'exemple.com a la redirection suivante, qui semble fonctionner pour tout sauf pour le fichier .CSS mentionné ci-dessus.

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{HTTP_Host} ^example.com$ [OR]
  RewriteCond %{HTTP_Host} ^www.example.com$
  RewriteRule (.*)$ https://example.org/$1 [R=301,L]
</IfModule>
3
wildernessdave
<link rel="stylesheet" href="http://www.example.com/Amazon/styles-site.css" type="text/css" />

Le problème sera que vous reliez à une ressource HTTP (non cryptée) à partir d'une page HTTPS (cryptée). Lors de la visualisation de la page HTTPS (éventuellement après une redirection initiale), le navigateur bloquera toutes les demandes de ressources HTTP afin de protéger l'utilisateur contre des informations personnelles potentiellement divulguées sur un canal non crypté. Par conséquent, la demande de fichier CSS non sécurisé (HTTP) n'est jamais faite et la redirection n'est jamais déclenchée.

Cela devrait être évident si vous affichez le trafic réseau dans le navigateur.

Le seul moyen Pour résoudre ce problème consiste à convertir les URL codées dans la source HTML pour utiliser https à la place de http (ou supprimez complètement le protocole et utilisez des URL relatives à protocole-relatifs, par exemple. //www.example.com/Amazon/styles-site.css ). Mais si vous allez faire cela, vous pourriez aussi bien modifier le nom de domaine en même temps (ou supprimez-le et utilisez simplement une URL relative racine, par exemple. /Amazon/styles-site.css).

toutes les centaines d'autres pages ne chargent pas le fichier CSS

La plupart des éditeurs de code sont capables de faire des recherches globales/remplacez sur plusieurs fichiers. Dans ce cas, même juste chercher le texte littéral "http://www.example.com" Peut-être suffisant?

Tests rapides pour prouver le point ...

  • changez votre redirection pour utiliser http:// Au lieu de cela et demandez la page sur http. Utilisez une redirection temporaire 302 et effacez votre cache de navigateur. La demande de fichier CSS doit être redirigée.
  • modifiez le href pour être un protocole-relatif (comme indiqué ci-dessus). Le fichier CSS devrait être redirigé.

Cependant, même si la redirection "fonctionnait", ce n'est qu'un piratage temporaire, pas une solution à long terme. Vous doublez potentiellement les demandes frappant votre serveur (si vous avez de nombreux visiteurs uniques) qui polluent votre journal d'accès avec 301 et éventuellement ralentit l'expérience utilisateur.

2
DocRoot