2009-10-24 2 views
0
RewriteCond %{REQUEST_URI} !^/?new.php?url 
RewriteRule ^/?(.+)\.?(.+)$ new.php?url=$0 [L] 

은 단지 첫 번째 백 참조 $1하지왜이 URL이 제대로 다시 작성되지 않습니까?

+0

가능한 중복 : http://stackoverflow.com/questions/1616719/need-a-regex-to-match-url-without-http-https-ftp, http://stackoverflow.com/questions/1616770/help-rewriting-this-url-simple-but-not-working – Gumbo

답변

0

new.php하려고 계속하지만 어떤 URL을

mysite.com/someurl 

을 가지고

new.php?url=someurl 

로 변환되어 $0 AFAIK. 그게 아니라면 [QSA]를 지정해보십시오. 의심 스럽지만 말입니다.

RewriteCond %{REQUEST_URI} !^/?new.php?url 
RewriteRule ^/?(.+)\.?(.+)$ new.php?url=$1 [L] 
0

첫 번째 참조는 $ 0 대신 $ 1이어야합니다.

RewriteCond %{REQUEST_URI} !^/?new.php?url 
RewriteRule ^/?(.+)\.?(.+)$ new.php?url=$1 [L] 

또한 파일에있는 다른 코드 행에 따라 다릅니다. 충돌하는 다른 코드가 있으면 재 작성을 망칠 수도 있습니다.

RewriteCond %{REQUEST_URI} !^/?new.php\?url 

또한 두 번째 줄에 괄호 그룹을 사용하지 않는 :

2

당신은 문자 그대로 물음표를 일치하도록 첫 번째 줄의 두 번째 물음표를 탈출해야합니다. $0이 괜찮 으면, 아니면 $1을 원할 수도 있습니다. 당신이 $0를 사용하는 경우 당신이 그것을 무리를 단순화 수 :

RewriteRule ^.*$ new.php?url=$0 [L] 

아니면 내가 약간의 변경 수정을 제안 이유의 URL을 떨어져 파괴하는 경우 반면에

. 파일 이름과 확장명을 정확하게 일치시키지 않습니다. 이와 같은 좀 더 복잡한 정규식은 아마 더 나은 서비스를 할 것 :

RewriteRule ^/?(.*?)(?:\.([^.]*))?$ new.php?path=$1&extension=$2 [L] 

설명 :

  1. (.*?) 디렉토리 및 파일 이름과 일치합니다. ?은 탐욕스럽지 않게 일치하므로 다음 부분과 일치하는 즉시 중지하십시오. 괄호로 인해 캡처되고 $1에 저장됩니다.

  2. (?:\.([^.]*))?은 파일 확장자와 일치합니다. ?: turns는 바깥 쪽 괄호 세트를 캡처하지 않기 때문에 도트는 $2에 캡처되지 않습니다. ([^.]*)은 확장자와 일치하고 점이 포함되지 않도록합니다. 최종 ?은 파일 확장자 부분을 선택적으로 만듭니다. 모든 URL에 파일 확장자가있는 것은 아닙니다. 따라서 파일 확장자가있는 경우에만 $2이 표시됩니다.

관련 문제