2016-12-03 10 views
0

が、私はこのように私のURLでクリーンな方法でカテゴリを使用しようとしている一致していない一部ランダム例:のhtaccessのRewriteRuleパターンは

動物
家電
Books- & -Comics
外付けハード・ディスク
フォーム、-B eauty- & - ヘルススパ
ブラック - & - 白 - テレビ
-冒険・オブ・タンタン
フライヤー、-Waffle-makers- &が-Cooking
等...

あなたが見ることができるように、単語(開始大文字)、文字 " - "、 "、"、および "&"のランダムな組み合わせがあります。例よりも多くの組み合わせがあります。リライトで

私はこのような変数にカテゴリを取得しようとしている:

RewriteRule ^([\w-&]+)$ /categories.php?mcn=$1 [L,NC] 

これは動作しません。私がcategories.phpの "Books-& -Comics"で欲しい変数を読んだ場合、 "Books-"は "Books-& -Comics"になるはずです。

私は追加すると、「」このような文字クラスに:

RewriteRule ^([\w,-&]+)$ /categories.php?mcn=$1 [L,NC] 

私は内部サーバーエラーを取得します。

私のRewriteRuleは、カテゴリの例と一致し、それらを変数で正しく取得するにはどうすればよいですか?

答えて

0

最初の問題は、パラメータがデコードされているため、&が新しいURLパラメータを開始していることです。これを修正するには、Bフラグをルールに追加します。

2番目の問題は、パターン^([\w,-&]+)$が無効であることです。任意の単語文字、または,&の間の任意の文字を一致させようとしています。 (Ascii 44 & 38)これは順序が違うので、正規表現は失敗します。範囲のインジケーターとして使用するのではなく-文字を一致させたいので、エスケープする必要があります。

RewriteRule ^([\w,\-&]+)$ /categories.php?mcn=$1 [L,NC,B] 

regex101のような正規表現ヘルパーは自分のルールを作成する上で大きな助けになりますこれらの変更により

は、あなたのルールがありました。

+0

IkはBフラグも重要なようです。それは逆参照をエスケープする権利ですか? – Thoaren

+0

@Thoaren、はい。それは正しい - Bフラグは、あなたのURLに特殊文字を使用して、逆参照をエスケープすることができるものです。 – Gerrit0