mod_rewrite를 사용하여 예쁜 URL을 Spring 2.5 애플리케이션에서 지원하는 양식으로 다시 작성하고 있습니다. mod_rewrite : 경로 및 쿼리 문자열 URL을 매개 변수로 전달하십시오.
e.g. /category/cat1?q=x => /controller?category=cat1&q=x
그러나 내 컨트롤러에서 나는 요청이 온 원래의 URL을 (필요한 경우 내가 링크를 생성 할 수 있습니다) 알고 싶어요. 이 접근 방식은 일반적으로 모든 페이지에서 필요하므로 하드 코딩이 어렵습니다.
컨트롤러에서 원래 경로 + 쿼리 문자열에 액세스하려면 어떻게합니까?
$ 0을 사용하여 전체 경로를 포함 시키려고했지만 쿼리 문자열을 포함하지 않았습니다. 경로의 일부만 매개 변수로 추가되는 결과로 경로와 쿼리 문자열을 추가 할 수 없습니다. /category/cat1?category=cat1&q=x
원치 않는 &category=cat1
매개 변수가 추가되어 브라우저에서 보낸 URL이 더 이상 일치하지 않습니다. 내 원래의 예를 내 컨트롤러는 것에 통과 한 최종 결과를 사용
RewriteRule /category/(.+)
/controller?category=$1&_originalUrl=${escape:$0}?${escape:<original query string>}
[QSA]
:
내가 바라고 있어요 mod_rewrite는이 같은 내 규칙을 볼 수 있었다 나 전체 URL을 참조 할 수 있도록하고 매개 변수로 인코딩합니다 :
/controller?category=cat1&_originalUrl=%2Fcategory%2Fcat1%3Fsearch%3Dx&search=x
중요한 부분은 이스케이프 버전 /category/cat1?q=x
(브라우저로부터 전송 된 원래의 요청 URL) 인 %2Fcategory%2Fcat1%3Fsearch%3Dx
&_originalUrl
되어야의 값이다.
의견을 보내 주셔서 감사합니다.
http://tools.cherrypy.org/wiki/ModRewrite에서 이스케이프 기능 $ {escape : $ 1}을 (를) 발견했습니다. 이제 경로와 원래 쿼리 문자열을 추가하는 방법을 알아야합니다. $ {이스케이프 : $ 0} $ {이스케이프 : <원래 쿼리 문자열>} –
원래 경로와 쿼리 문자열을 별도의 매개 변수로 수신하는 것이 적절한 솔루션입니다. 예 : & _originalPath = $ {이스케이프 : $ 0} & _ originalQueryString = $ {이스케이프 : <원래 쿼리 문자열>} <원래 쿼리 문자열>은 어떻게해야하는지 모릅니다. –
안녕하세요, 해결하기 위해 비슷한 문제가있어,하지만 그것은 보인다 : 탈출 다시 쓰기 맵 트릭을하지 않습니다 : URL을 인코딩 (예 :/% 2F로, & 26 % 등), 그냥 문자 인코딩 URL에는 허용되지 않습니다. 마지막으로 볼 수있는 옵션은 외부 매핑 프로그램을 사용하는 것입니다. 그러나 더 많은 문제가 생기고 있습니다. 다시 작성한 URL에 "; original_qs ="를 추가합니다. –
huelbois