1

私はこのwget行で静的をb2evolutionサイトにしようとしています:

  wget -nv -b -m -k -p -E -erobots=off --tries=5 --exclude-directories=calendar,users,user --domains directory http://site.com

次のようなファイルが生成されます。

  index.php?blog=2&cat=21.html

このURLにアクセスしようとしています:

  http://site.com/index.php?blog=2&cat=21.html

私はブラウザでこのエラーを受け取ります:

  Not Found
  The requested URL /index.php was not found on this server.

そしてこれはerror.logにあります:

  [Mon Feb 10 19:02:49 2013] [error] [client xx.xx.xx.xx] script '/var/www/site.com/htdocs/index.php' not found or unable to stat, referer: http://site.com/index.php

しかし、代わりに%3Fを使用してアクセスできます'?':

  http://site.com/index.php%3Fblog=2&cat=21.html

私のスコープは、apache rewrite_modを使用して「?」を変更する古いタイプのURL(「?」を含む)でサイトへのアクセスを許可することです。'%3F'を使用します。私は試しました:

  RewriteRule ^index.php\? index.php\%3F [QSA,NE]

しかし、私はログでこのエラーを受け取ります:

  Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace.

mod_rewriteまたは他のwget引数で解決するアイデアはありますか?

4

2 に答える 2

1

次のルールは、ファイル名に。が含まれている場合に機能するはず?です。

RewriteEngine On
RewriteCond %{QUERY_STRING} (.+)
RewriteRule ^(index\.php)$ $1\%3F%1 [L]

次のように機能します。

  • RewriteRule最初に評価され、一致は$ 0、$ 1、..に格納されます。
  • 成功すると、RewriteCond評価され、一致が%0、%1、..に格納されます。
  • 最後に、2つの試合が結合されます
  • リテラル%文字は次のようにエスケープされます\%%nRewriteCondの後方参照に使用されるため必要です)
  • %3FはURLエンコードされた形式で?あり、それ以外の場合はクエリ文字列の開始を示します
  • .+空でないクエリ文字列を照合するために使用されます
于 2013-02-11T18:54:04.787 に答える
0

--restrict-file-namesオプションを参照してください。この特定の目的を正確に意図したものではありませんが、-restrict-file-names=windowsはおそらく次のことに役立ちます。

--restrict-file-names = modes

ローカルファイル名の生成中に、リモートURLで見つかった文字をエスケープする必要がある文字を変更します。[...]

「windows」を指定すると、Wgetは文字\、|、/、:、?、 "、*、<、>、および0〜31と128〜159の範囲の制御文字をエスケープします。これに加えて、WindowsモードのWgetは、:の代わりに+を使用してローカルファイル名のホストとポートを分離し、?の代わりに@を使用してファイル名のクエリ部分を残りの部分から分離します。したがって、wwwとして保存されるURL。 Unixモードではxemacs.org:4300/search.pl?input=blahは、Windowsモードではwww.xemacs.org+4300/search.pl@input=blahとして保存されます。

于 2013-04-11T01:33:23.243 に答える