web-dev-qa-db-de.com

NGINX - Versionsnummer in JS-Dateinamen auf Parameter für PHP umschreiben

Ich hatte eine Umschreibung von file.js?c=123 auf file.js.php?c=123, aber Abfrageparameter haben meine SEO-Bewertung herabgestuft. Einige Proxy-CDNs speichern keine Abfrageparameter im Cache.

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

SO möchte ich file.123.js zu file.js.php?c=123 umschreiben. Ist das möglich?

1
fiskolin
location ~ \startscript.js$ {

In regulären Ausdrücken ist der \s am Anfang Ihres uri eine Kurzzeichenklasse, die mit einem einzelnen Leerzeichen (oder "Leerzeichen") übereinstimmt. ). Es ist also unwahrscheinlich, dass dies mit irgendetwas übereinstimmt. Sie sollten jedoch vor der Dateierweiterung einen Backslash vor dem Literalpunkt setzen.

Ich gehe davon aus, dass "file" in file.js jede Datei sein könnte , es ist nicht immer "startscript"?

Versuchen Sie stattdessen Folgendes (UPDATED):

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

Wie ich in den Kommentaren erwähnt habe, macht dies jedoch keinen Unterschied in Bezug auf SEO Suchmaschinen behandeln die Abfragezeichenfolge einfach gut - immer). In der Vergangenheit war es möglicherweise ein Usability-Problem , da einige Proxy-Server nicht anhand der Abfragezeichenfolge zwischengespeichert haben. Daher haben Benutzer möglicherweise nicht den richtigen Inhalt gesehen (wenn sie dahintersteckten) ein Proxy, der sich so verhalten hat) - aber das ist historisches AFAIK.

Siehe auch meine Antwort auf folgende Frage:


... dies löst einen 404-Fehler aus, zB: domain.com/startscript.82b4527379bd2540f79f532950c7b96b.js

Das obige Beispiel stimmt speziell nur mit Ziffern überein (wie in Ihrem ersten Beispiel). Was Sie dort haben, sieht aus wie ein 32-Zeichen-Hex-Wert (Hash?). Versuchen Sie stattdessen Folgendes (UPDATED):

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

Oder verwenden Sie den allgemeineren \w+, wie in @devnull in Kommentaren vorgeschlagen, um mit einem beliebigen "Wort" -Zeichen übereinzustimmen (dh 0-9, a-z, A-Z und _). Obwohl es bei Regex generell ratsam ist, so spezifisch wie möglich zu sein, sollten Sie immer ein 32-Zeichen-Hex verwenden, um ein 32-Zeichen-Hex zu finden.

2
MrWhite