2013-02-11 2 views
1
나는이 wget을 라인의 정적 b2evolution 사이트를 만들려고

:재 작성 .... %를되는 index.php 3 층 ... HTML

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

이 같은 파일을 생성 이 :

01 : 내가 브라우저에서이 오류를 받아 봐

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

:

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

은이 URL을 방문하려고 23,516,

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 

내 범위는 이전과 사이트에 대한 액세스를 허용입니다 '?'을 수정하기 위해 rewrite_mod라는 아파치를 사용하는 url 유형 ('?') '% 3F'이 (가) 있습니다. 나는 함께 tryed있다 :

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과 인수를 해결하기를?

답변

1

파일 이름에 ?이 포함 된 경우 다음 규칙을 따라야합니다. 다음과 같이

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

그것은 작동합니다

  • RewriteRule을 평가 는 $ 0 $ 1, ...
  • 성공시
  • , RewriteCond 평가와 일치 얻을됩니다에 저장된 얻을 일치 처음 % 0, % 1, ...에 저장 됨
  • 마지막으로 두 일치가 결합됩니다.
  • 문자 적 ​​% 문자가 이스케이프 \%로 (%n 이후 필요가한다 RewriteCond에 사용되는 백 참조)
  • %3F
  • .+이 비어를 일치시키는 데 사용되는 다른 쿼리 문자열의 시작을 의미 ?의 URL 인코딩 된 형태이다 쿼리 문자열
+0

it 공장. undestand .. Cond와 함께 나중에 % i (이 경우 i = 1)와 함께 사용할 수있는 0 이상의 char을 가진 쿼리를 얻습니다. $ 1 arg 사이에()를 잡을 수 있습니다. 내부의 점은 모든 문자를 의미하므로 보호되어야합니다. 마지막에는 mod_rewrite에게 수신 된 URL을 trasform하는 방법을 알려줍니다. – jedi

+0

거의 정확합니다. 나는 나의 대답을 편집했다. 훨씬 정확한하려면 –

+0

! tnx. – jedi

0

- restrict-file-names 옵션을 참조하십시오. 모드 =

--restrict-파일 이름 문자가 원격 URL을 발견

변경 : 정확히이 특정 목적을 위해 의도 된 것은 아니지만, --restrict-파일 이름 = 창은 아마도 함께 당신을 도울 것입니다 로컬 파일 이름을 생성하는 동안 이스케이프되어야합니다. [...]

"windows"가 주어지면 Wget은 \, |, /, :,?, ", *, <,> 및 0-31 및 128 범위의 제어 문자를 이스케이프합니다. 이 외에도 Windows 모드의 Wget은 다음 대신 +를 사용합니다. 로컬 파일 이름에 호스트와 포트를 구분하고?에서 으로?를 사용하여 파일 이름의 쿼리 부분을 나머지와 구분합니다. 따라서 유닉스 모드에서 www.xemacs.org:4300/search.pl?input=blah 으로 저장 될 URL은 Windows 모드에서 www.xemacs.org+4300/[email protected]=blah로 저장됩니다.