2016-09-14 2 views
1

私は脳が退色していて、何か助けてください。私は、次のURLを取る必要がありこれらの3つの書き換えルールを1つに組み合わせることはできますか?

RewriteRule ^([0-9]+)$ /bar/$1.html [R=301,L] 
RewriteRule ^([0-9]+)(-*)$ /bar/$1.html [R=301,L] 
RewriteRule ^([0-9]+)-([0-9]+)$ /bar/$1.html#$2 [R=301,NE,L] 

:私はちょうど1を取るべきだと思う何かを達成するために3 RewriteRulesを使用してい

http://foo.com/100 
http://foo.com/100-1 
http://foo.com/200- 
http://foo.com/1999 
http://foo.com/1999-99 

を...と、このようにそれらを書き換える:

http://foo.com/bar/100.html 
http://foo.com/bar/100.html#1 
http://foo.com/bar/200.html 
http://foo.com/bar/1999.html 
http://foo.com/bar/1999.html#99 

私が持っているもののようですが、ハックのようです。これをすべて1つのルールに組み込む方法はありますか?

答えて

1

3つのルールを1つのルールにまとめる方法はありません。なぜなら、置換構造は常に同じではなく、ハッシュが時々現れたり、時には表示されないことがあるからです。しかし、あなたは最初の2つのルールを組み合わせることができます。

RewriteRule ^([0-9]+)-?$ /bar/$1.html [R=301,L] 

あるとして、ハッシュ記号で置き換える二番目のルールは、残ることができます。

RewriteRule ^([0-9]+)-([0-9]+)$ /bar/$1.html#$2 [R=301,NE,L] 
+0

ありがとうございます。あなたが最初の2つを組み合わせることについて言及したので、今はとても分かります。明らかに私はそれをあまりにも長く見ていた。 – TunaMaxx

1

あなたはこのトリックを一つにすべての3つのルールを組み合わせることができます第一状態において

RewriteCond %{REQUEST_URI} ^/(\d+)-?(\d+)?$ 
RewriteCond %1#%2 ^(\d+)#$ [OR] 
RewriteCond %1#%2 ^(\d+)(#\d+)$ 
RewriteRule^/bar/%1.html%2 [R=301,L,NE] 
  • 、我々は、オプションのハイフンに続く番号と別の任意NU始まる正規表現パターンと一致しますmber。
  • 次の2つの条件は[OR]を使用しているため、1つだけが真です。
  • URIが/100の場合、最初の条件はtrueになり、100%1に取り込まれますが、%2は空になります。
  • URIが/100-1の場合、2番目の条件は真となり、100%1にキャプチャされますが、%2#1になります。
+0

ありがとうございます。私は実際に似たような解決策を考え出しましたが、場合によっては「#」がついていました。私はそこにいることは無害だと知っていますが、時折空の#がなくても書き直すことができる魔法の解決策を望んでいました。 – TunaMaxx

+0

魔法の解決策は空の '#'を取り出すことが可能で、数分で更新されます。 – anubhava

+0

更新されたルールを今すぐお試しください。 – anubhava

関連する問題