私はへ/orders/whatever/?n=4
からリダイレクトしたい:私は正しいディレクトリにリダイレクトするために管理が、私は渡された変数を失ってい
/orders/?shopURL=whatever&n=4
。
これは私の現在のルールである:それは、ほぼすべてのページにリダイレクトしているかのよう
RewriteRule ^([\w\d]+)$ /orders/?shopURL=$1 [L]
私はへ/orders/whatever/?n=4
からリダイレクトしたい:私は正しいディレクトリにリダイレクトするために管理が、私は渡された変数を失ってい
/orders/?shopURL=whatever&n=4
。
これは私の現在のルールである:それは、ほぼすべてのページにリダイレクトしているかのよう
RewriteRule ^([\w\d]+)$ /orders/?shopURL=$1 [L]
RewriteRule ^orders/([\w\d]+)/?$ /orders/?shopURL=$1 [L,QSA]
あなたのRewriteRuleは、非常に一般的なようです。
私は正規表現でそれほど大きくありませんので、それらをあなたや他の人に任せておきます。しかし、パラメータをキャッチして新しいURLの最後に追加するには、書き換えルールの最後に何かが必要です。それ以外の場合は
RewriteCond %{QUERY_STRING} (\bn=\d+\b)
RewriteRule ^orders/([\w\d]+)/?$ /orders/?shopURL=$1&%1 [L]
、あなたがするRewriteCondせずに、次を使用することができます:あなたは、クエリ文字列、使用の有無を強制したい場合
RewriteRule ^([\w\d]+)/(somethinghere)$ /orders/?shopURL=$1&$2 [L]
QSA
フラグへRewriteRule
は、既存のクエリ文字列フィールドを保持します。
「(n = \ d *)」も 'ban = 234G'と一致します。この場合、 '(\ bn = \ d * \ b)'を使用してください。 – TerryE
\ dは数字にしか一致しないので、最後に\ bを避けることができますが、それを前面に追加することは絶対必要です。私はそれを使用するために私の答えを更新します。 (私は以前は本当に\ bを使ったことがなかったので、 'ban'と' n'の状況を防ぐ方法を考えることができなかったので、それを指摘してくれてありがとう!) –
ほとんどの開発者はApache regexpエンジンは**フル** PCREの実装です。だから、メタキャラクター、貪欲でないマッチング、ルックアヘッド/リアクションアサーション、\ n変数のようなものはすべて動作します。 :-) – TerryE