web-dev-qa-db-ja.com

NGINX-JSファイル名のバージョン番号をPHPのパラメーターに書き換えます

file.js?c=123からfile.js.php?c=123に書き直しましたが、クエリパラメーターがSEO評価をダウングレードしていました。実際、一部のプロキシCDNはクエリパラメータをキャッシュしません。

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

それで、file.123.jsfile.js.php?c=123に書き換えたいと思います。それは可能ですか?

1
fiskolin
location ~ \startscript.js$ {

正規表現では、riの先頭にある\sは、単一のspace(または「空白文字」)に一致する簡略文字クラスです。したがって、これが何にも一致する可能性は低いです。ただし、ファイル拡張子の前にリテラルドットをバックスラッシュでエスケープする必要があります。

file.jsの "file"はany fileであると想定しますが、常に「startscript」とは限りませんか?

代わりに以下を試してください(UPDATED):

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

ただし、コメントで述べたように、これはSEOに関して違いはありません(検索エンジンクエリ文字列をうまく処理します-常に持っています)。過去には、一部のプロキシサーバーがクエリ文字列に基づいてキャッシュしなかったため、おそらくsabilityの問題でした。そのため、ユーザーは正しいコンテンツを見ていなかった可能性があります。方法)-しかしこれはhistorical AFAIKです。

次の質問に対する私の回答も参照してください。


...これは404エラーをスローしています。例:domain.com/startscript.82b4527379bd2540f79f532950c7b96b.js

上記の例は、数字のみに一致します(最初の例のように)。そこにあるものは32文字の16進値(ハッシュ?)のように見えます。代わりに以下を試してください(UPDATED):

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

または、コメントで@devnullが示唆したように、より一般的な\w+を使用して、「Word」文字(つまり、0-9a-zA-Zおよび_)。正規表現ではありますが、通常はできるだけ具体的にすることをお勧めします。したがって、常に32文字の16進数である場合は、32文字の16進数に一致します。

2
MrWhite