2012-03-03 14 views
0

私はへ/orders/whatever/?n=4

からリダイレクトしたい:私は正しいディレクトリにリダイレクトするために管理が、私は渡された変数を失ってい

/orders/?shopURL=whatever&n=4 

これは私の現在のルールである:それは、ほぼすべてのページにリダイレクトしているかのよう

RewriteRule ^([\w\d]+)$ /orders/?shopURL=$1 [L] 

答えて

1

RewriteRule ^orders/([\w\d]+)/?$ /orders/?shopURL=$1 [L,QSA] 
+2

「(n = \ d *)」も 'ban = 234G'と一致します。この場合、 '(\ bn = \ d * \ b)'を使用してください。 – TerryE

+0

\ dは数字にしか一致しないので、最後に\ bを避けることができますが、それを前面に追加することは絶対必要です。私はそれを使用するために私の答えを更新します。 (私は以前は本当に\ bを使ったことがなかったので、 'ban'と' n'の状況を防ぐ方法を考えることができなかったので、それを指摘してくれてありがとう!) –

+0

ほとんどの開発者はApache regexpエンジンは**フル** PCREの実装です。だから、メタキャラクター、貪欲でないマッチング、ルックアヘッド/リアクションアサーション、\ n変数のようなものはすべて動作します。 :-) – TerryE

0

あなたの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] 
1

QSAフラグへRewriteRuleは、既存のクエリ文字列フィールドを保持します。

関連する問題