2

301 リダイレクトを使用して htaccess でグループをキャプチャするのに苦労しています。

私のルールはRedirectMatch 301 ^/viewitems/([_\-a-zA-Z0-9]+)/([_\-a-zA-Z0-9]+) http://example.com/catalogsearch/result/?q=$2&dir=desc&order=relevance

しかし、テストURLは

http://example.com/viewitems/underground-hardwar/manhole-cable-hooks

次のような URL を作成します。

http://example.com/catalogsearch/result/?q=manhole-cable-hooks/viewitems/underground-hardwar/manhole-cable-hooksdir=desc/viewitems/underground-hardwar/manhole-cable-hooksorder=relevance

どうやら、すべて&をすべてのキャプチャグループに置き換えます。何が起こっていて、何が間違っていますか?

4

1 に答える 1

2

Apache は PCRE を使用するため、エスケープ&されていないものは perl が行うことと同じことを行うと思います。つまり$&、最後に一致したパターンの文字列を保持します。この場合:

/viewitems/underground-hardwar/manhole-cable-hooks

したがって、それぞれ&が上記に置き換えられます。

そのため&、目的の結果を得るためにエスケープする必要があります。

RedirectMatch 301 ^/viewitems/([^/]+)/([^/]+)/? /catalogsearch/result/?q=$2\&dir=desc\&order=relevance
于 2013-08-26T19:41:26.330 に答える