0

次の書き換えルールがありますが、Apacheを再起動するたびに、apacheが再起動して失敗するのを防ぎます。

1つのエラーは...

Starting httpd: Syntax error on line 82 of /var/www/vhosts/current_release/url-rewrite-maps/catchall.txt: RewriteRule: cannot compile regular expression '^/ProductDetails\.aspx\?PromotionID\(.*)\&id\(.*)$' [FAILED]

RewriteRule ^/ProductSearch\.aspx\?Ntt\=(.*)\&N\=(.*)$ catalogsearch/result/?q=$2 [R=302,L,NC]  
#old search redirect to search

RewriteRule ^/ProductSearch\.aspx\?viewall\=1\&N\=(.*)$ productsearch.aspx?N=$1 [R=302,NC]  
#viewall with N parameter to another redirect rule for URL with N= value only

RewriteRule ^/ProductSearch\.aspx\?(Ne|No)\=(.*)\&N\=(.*)$ productsearch.aspx?N=$3 [R=302,NC]  
#url with Ne OR No param and N= to productsearch.aspx redirect on URLs with N= only

RewriteRule ^/ProductDetails\.aspx\?PromotionID\=(.*)\&id\=(.*)$ productdetails.aspx?id=$2 [R=302,NC]  
#should pass the PID into the ID= and redirect from there

RewriteRule ^/ProductDetails\.aspx\?id\=(.*)\&RSSLINK\=(.*) productdetails.aspx?id=$1 [R=302, NC]

ありがとう、

ブラッド

4

1 に答える 1

1

これは、あなたがしようとしていることは無効であるためです。正規表現一致パターンを介してクエリ文字列にアクセスすることはできません-許可されていません。クエリ文字列を取得するには、書き換え条件を使用する必要があります。次に例を示します。

RewriteCond %{QUERY_STRING}          PromotionID=(.*?)&id=(.*) [NC]
RewriteRule ^/ProductDetails\.aspx$  productdetails.aspx?id=%2 [R=302,NC,L]

これらのはしごを作成し、一番下にキャッチオールを置くことができます

RewriteCond %{ENV:REDIRECT_STATUS}   ^$
RewriteRule ^                        /catchall.txt [L]

これにより、以前のルールに一致しなかったすべてのリクエストがキャッチオールに内部リダイレクトされます。条件は、無限のリダイレクト ループを停止することです。

于 2013-01-16T02:15:06.513 に答える