
私はさまざまな製品を表示するウェブサイトに取り組んでいます。ユーザーは「mydomain.com/product/1.html」、「mydomain.com/product/2.html」などの URL でさまざまな製品ページにアクセスできます。
しかし、私はそれらの静的HTMLファイルを直接表示したくありません。代わりに、mydomain.com/product.phpに最初に読み込まれるPHPスクリプトがあります。
つまり、「mydomain.com/product/1.html」を「mydomain.com/product.php」にリダイレクトしたいのですが、元のURLは変更しません。
alias、try_files、return を試しましたが、すべて URL が 'mydomain.com/product.php' に書き換えられます。
私は Nginx を初めて使用しており、これはおそらく非常に簡単な質問ですが、数日間これを実現しようと試みました。
答え1
やり方はいろいろあります...
最も単純なのは
rewrite ^/product/ /product.php;
でサーバコンテキスト。元のリクエスト URI (つまり) は、配列項目の値としてスクリプト/product/1.html
で使用できます。product.php
$_SERVER['REQUEST_URI']
rewrite
ディレクティブを使用することもできます位置文脈によっては、これは少し(とてもわずかにパフォーマンスが向上しました:
location /product/ {
rewrite ^ /product.php last;
}
必要に応じて、製品コードを取得し、それをproduct.php
クエリ引数としてスクリプトに渡すことができます。
rewrite ^/product/(.*)\.html$ /product.php?product=$1;
または
location /product/ {
rewrite ^/product/(.*)\.html$ /product.php?product=$1 last;
}
この方法では、製品コード ( URI1
の場合/product/1.html
、 URI2
の場合など) が配列項目の値としてスクリプト/product/2.html
で使用できるようになります。product.php
$_GET['product']
これには個別の FastCGI ハンドラーを定義することもできます。
location /product/ {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root/product.php;
fastcgi_pass <fastcgi_upstream_or_socket>;
}
(元のリクエスト URI は 経由で利用可能になります$_SERVER['REQUEST_URI']
)、または製品コードを 経由で利用可能にしたい場合は、次のようになります$_GET['product']
:
location ~ /product/(.*)\.html$ {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root/product.php;
fastcgi_param QUERY_STRING product=$1;
fastcgi_pass <fastcgi_upstream_or_socket>;
}