.htaccess url rewrite remove 2 id

Nov 02 2020

URLの2つのパラメータIDを削除して番号を表示することは可能ですか?現在私はこのようなURLを持っています:

http://localhost/photo_gallery/public/product_configurator.html?prometheus_id=10082&id=73

必要なURL:

http://localhost/photo_gallery/public/product_configurator.html/10082&73

.htaccess

RewriteEngine on
RewriteRule ^(.*).html $1.php RewriteRule ^product_configurator.php/(\d+)$ product_configurator.php?prometheus_id=$1&id=$2 [NC,L]

それは可能ですか?

回答

MrWhite Nov 02 2020 at 20:03

私は、(あなたのディレクティブを見て)あなたの.htaccessファイルがにあると仮定しています/photo_gallery/public/.htaccess

RewriteRule ^product_configurator.php/(\d+)$ product_configurator.php?prometheus_id=$1&id=$2 [NC,L]

これは近いですが、キャプチャサブパターン(つまり(\d+))は1つしかありませんが、置換文字列には2つの後方参照(つまり$1$2)があります。また、一致するのは数字()のみですが、一致させたいパターンには数字以外の数字が含まれています。したがって、上記は単に一致しません。\d&

.php拡張子も導入しましたが、投稿したURLの例はで構成されています.html。私はあなたがすでに書き直し.htmlていると仮定しています.php(あなたの指令によって示唆されているように)。ただし、これは1つのディレクティブで直接行う必要があります。

拡張子を.htmlから.php(つまりRewriteRule ^(.*).html $1.php)に変更するように書き直すと、一致させようとしている情報も上書きされます。これはURLパスに含まれているためです。

代わりに次を試してください。

RewriteEngine On

# Rewrite "product_configurator.html/10082&73"
RewriteRule ^(product_configurator)\.html/(\d+)&(\d+)$ $1.php?prometheus_id=$2&id=$3 [L]

product_configuratorリクエストから文字列を($1後方参照に)キャプチャして、置換文字列の繰り返しを保存します。$2そして$3、その後の前と後の値を表す&URLパスで。

NC潜在的な「重複コンテンツ」の問題を防ぐために、フラグを削除しました。大文字と小文字を区別しない一致が特に必要な場合を除いて、NCフラグは避ける必要があります。

その後...

# Rewrite other ".html" requests to ".php"
RewriteRule (.+)\.html$ $1.php [L]