web-dev-qa-db-fra.com

NGINX - Réécrivez le numéro de version dans le nom de fichier JS en paramètre pour PHP.

J'ai eu une réécriture de file.js?c=123 vers file.js.php?c=123 mais les paramètres de requête dégradaient mon évaluation SEO. En fait, certains CDN de proxy ne mettent pas en cache les paramètres de requête.

server {
    location ~ \startscript.js$ {
        rewrite (.*) $1.php last;
    }
}

SO, je voudrais réécrire file.123.js à file.js.php?c=123. Est-ce possible?

1
fiskolin
location ~ \startscript.js$ {

Dans regex, le \s au début de votre uri est une classe de caractères abrégée qui correspond à un seul space (ou "caractère d'espacement"). Il est donc peu probable que cela corresponde à quoi que ce soit. Cependant, vous devez échapper la barre oblique inversée avant le numéro de fichier.

Je suppose que "fichier" dans file.js pourrait être n'importe quel fichier , ce n'est pas toujours "startscript"?

Essayez plutôt ce qui suit (UPDATED):

server {
    location ~ \.js$ {
        rewrite (.+)\.(\d+)\.js$ $1.js.php?c=$2 last;
    }
}

Cependant, comme je l’ai mentionné dans les commentaires, cela ne fait aucune différence en ce qui concerne le référencement ( moteurs de recherche gérer correctement la chaîne de requête - l’a toujours). Dans le passé, il s’agissait peut-être d’un problème utilisabilité , car certains serveurs proxy ne mettaient pas en cache la chaîne de requête. Ainsi, les utilisateurs n’auraient peut-être pas vu le contenu correct (s’ils étaient en retard). un proxy qui se comportait de cette façon) - mais ceci est historique autant que je sache.

Voir aussi ma réponse à la question suivante:


... cela génère une erreur 404, par exemple: domain.com/startscript.82b4527379bd2540f79f532950c7b96b.js

L'exemple ci-dessus correspond spécifiquement aux chiffres uniquement (comme dans votre exemple initial). Ce que vous avez là ressemble à une valeur hexadécimale de 32 caractères (hachage?). Essayez plutôt ce qui suit (UPDATED):

rewrite "(.+)\.([\da-f]{32})\.js$" $1.js.php?c=$2 last;

Ou utilisez le plus générique \w+, comme @devnull le suggère dans les commentaires, pour faire correspondre tout caractère "Word" (c'est-à-dire. 0-9, a-z, A-Z et _). Bien qu'avec regex, il est généralement conseillé d'être aussi spécifique que possible, donc si c'est toujours un hexagone de 32 caractères, faites correspondre un hexagone de 32 caractères.

2
MrWhite