2016-06-12 4 views
0

URLの末尾に数字を囲む文字が含まれている場合(ただし、最初の部分は数字、ハイフンまたはapの任意の組み合わせが可能です)、urlその番号が取り除かれた周囲のものと一緒にリダイレクトされます。ここでApacheの書き換えルールを無効にする

は私の正規表現です:

RewriteRule ^all/[^p^P^0-9^\-]+([0-9]+).*$ /allof/$1 [R=301,NC,L] 

私はこれらのテストのURLを試してみました場合は、リダイレクトが起こるはずですが、ありません:私は、このテストのURLを試してみました

http://example.com/all/-a*1 
http://example.com/all/plus100 

場合は、リダイレクトが発生しません。これは正しいです:

http://example.com/all/p1-100 

これらのテストURLを試してみましたが、正しいです:

http://example.com/all/(100) - redirects to http://example.com/allof/100 
http://example.com/all/minus100 - redirects to http://example.com/allof/100 

おそらく私の正規表現に誤りがあります。私は最初のものを除いて角括弧内の余分なキャレットを取り除こうとしましたが、それは助けになりませんでした。そして、私はその番号を捕まえることができないので、角括弧を.*と置き換えたくありません。私は何が間違っていますか?

+0

あなたは正確に、何をしようとして明確にすることはできますか?可能であれば、リダイレクト前後のサンプルURLのリストを指定します。 –

+0

URLには、一番右側のスラッシュを超えるものはすべて数字でなければなりません。同じスラッシュと数字の間にあるもの(数字ではないもの)はすべて削除する必要があります。番号の後に来るもの(番号ではないもの)も削除する必要があります。私は私の質問を編集しようとしましたが、システムは私を許さなかったでしょう。 – Mike

+0

期待される出力を表示する必要があります。例えば、 'http:// example.com/all/p1-100'では、あなたの期待される出力は何ですか? –

答えて

0

あなたのルールで否定先読みを使用することができます。

RewriteRule ^all/(?!p\d*-)\D*(\d+) /allof/$1 [R=301,NC,L] 

RegEx Demo