1

古いサイトの URL (末尾が .aspx/asp で数百個) を新しいサイト (末尾が .jsp/servlets) に移行する必要があります。この移行を Apache で使用RedirectMapし、実装することを選択しました。RedirectRuleプレーンな URL は正常に機能しています。ただし、ソース URL の大文字と小文字が区別されるため、PAGENOTFOUND にリダイレクトされます (たとえば、/magazine/Magazine.aspx?Id=4はhttp://mydomain.com/advice/beautyPAGENOTFOUNDではなくにリダイレクトされます)。

別の問題は、クエリ文字列を使用してソース URL をリダイレクトできないことです (たとえば、/Help/Help.aspx?HelpID=6はhttp://mydomain.com/services/essential-infoPAGENOTFOUNDではなくにリダイレクトされます) 。 .

サンプルの redirectmap テキスト ファイルを以下に示します。

/100001/Product.aspx    http://mydomain.com/urlredirect/p100003
/100002/Product.aspx    http://mydomain.com/urlredirect/p100005
/Help/Help.aspx?HelpID=6    http://mydomain.com/services/essential-info
/Help/Help.aspx?HelpID=11   http://mydomain.com/services/info-about-delivery-methods
/Magazine/Feature.asp?Id=816    http://mydomain.com/advice/all-about-you.asp
/Magazine/Magazine.aspx?Id=4    http://mydomain.com/advice/beauty
/Advive/all-about-you.asp   http://mydomain.com/advice/beauty-in-you

Apache で書かれたリダイレクト コード

RewriteEngine on
RewriteMap text2id txt:/opt/webserver/apache/conf/redirectmap.txt
RewriteRule ^(.*\.(aspx|asp)) ${text2id:$1} [NC,R=301,L]
4

3 に答える 3

3

Jon Lin の回答は、マップ内で正しいリダイレクトを検索するのに役立ちました。以下のようにコードを更新しました。

以下は、実装されたリダイレクト コードです。

RewriteEngine on
RewriteMap text2id txt:/opt/webserver/apache/conf/redirectmap.txt
# Base URL Does have a QS 
RewriteCond %{REQUEST_URI} ^(.*\.(aspx|asp).*)
RewriteCond ${text2id:%1?%{QUERY_STRING}} ^(.*\?.*)$
RewriteRule ^.*$ %1 [R=301,L]

# Base URL exists in the map
RewriteCond %{REQUEST_URI} ^(.*\.(aspx|asp).*)
RewriteRule ^.*$ ${text2id:%1|PAGENOTFOUND} [R=301,L]
于 2012-09-28T14:57:15.520 に答える
1

そのようなクエリ文字列と照合することはできません。

あなたのルールでは:

RewriteRule ^(.*\.(aspx|asp)) ${text2id:$1} [NC,R=301,L]

書き換えマップに送信される唯一のものは、クエリ文字列ではなく、URI パスです。クエリ文字列も書き換えマップに渡す必要があります。

RewriteRule ^(.*\.(aspx|asp)) ${text2id:$1?%{QUERY_STRING}} [NC,R=301,L]
于 2012-09-21T07:27:01.410 に答える