나는 아주 간단한 URL 재 작성 규칙을 가지고 : http://mywebsite.com/test/http://example.com
다음 쿼리 매개 변수로이 script.php에 http://example.com
를 보내둘 이상의 백 슬래시가 있으면 다시 쓰기가 자동으로 제거됩니까?
RewriteEngine on
RewriteCond %{HTTP_HOST} !script.php
RewriteRule ^test/(.*) script.php?q=$1
아이디어는 URL을 이런 종류의 것입니다. 문제는 http://example.com
대신 http:/example.com
이 수신된다는 것입니다. 또한 http:////example.com
은 http:/example.com
으로 전송됩니다. 이 문제의 원인은 무엇입니까?
한다 RewriteCond %가 {HTTP_HOST} script.php'이 조금에 이해되지 않는다'주의하시기 바랍니다. '% {HTTP_HOST}'는 url의 호스트 명입니다. 예를 들어 위의 예제에서'mywebsite.com'이거나 웹 사이트에'http : // 127.0.0.1/aasdf '를 요청하면'127.0.0.1'입니다. 게다가 두 번째 인수는 정규 표현식입니다. 정규식의 점은 리터럴 점을 포함하여 많은 문자와 일치합니다. 문자 그대로의 점과 일치하는 것을 의미한다면 그것을 탈출하십시오! ('! script \ .php') – Sumurai8
맞아요, 그래서 어떻게 전체 URL을 일치시킬 수 있을까요? – Zed
'script.php'가'^ test /(.*)'와 일치하지 않기 때문에 조건은 필요 없습니다. 어떤 이유에서 RewriteRule의 첫 번째 인수와 일치하는 것을 제외해야하는 경우 일반적으로'RewriteCond % {REQUEST_URI}! ^/script \ .php $'와 같은 것을 사용합니다. 규칙을 통해 다양한주기를 통해 내부적으로 다시 쓰여지는 것이 아니라 들어오는대로 요청을 일치시켜야하는 경우'% {THE_REQUEST} '와 (과) 일치시킬 수 있습니다. 이것은 정기적 인 재 작성이 아닌 무한 재 작성에서 고생하는 상황에서 유용 할 수 있습니다. – Sumurai8