2011-09-03 2 views
6

기본적으로 mod_rewrite를 사용하여 추가 변수를 URL에 넣을 수 있다면 누구나 아이디어를 가지고 있습니다. 나는 URL이있는 경우 예를 들어mod_rewrite로 이미 재 작성된 URL에 URL 변수를 추가하는 방법

는 :

website.com/post/53/post-title/ 

내가로를 설정하는 mod_rewrite를 사용하고 있습니다 :

website.com/post.php?postid=53 

이 우아한은 "사전에 추가 변수를 넣어 방법이 있나요 -rewritten "URL을 입력하고 post.php 스크립트 용으로 보관 하시겠습니까?

website.com/post/53/post-title/?anothervar=6 

을 지금까지 그냥 추가 변수를 던지는이 같은 post.php 스크립트에 URL을 보내는 내 mod_rewrite의 코드처럼 보인다 : 나는 다음을 등 링크를 만들 경우 어떤

IE,

website.com/post.php?postid=53 
내가이 mod_rewrite를하여 다시 작성하고 그냥 변수에 추가 얻을 수있는 문자열을 잘라되기 전에 내 PHP 스크립트에서 (AKA website.com/post/53/post-title/?anothervar=6)를 원래의 URL을 얻을 수 $_SERVER['REQUEST_URI']를 사용할 수 있다는 것을 알고 있지만 않습니다

mod_rewrite를 단독으로 사용한보다 우아한 솔루션이 있는지 알고 싶었습니다.

답변

13

% {QUERY_STRING}을 (를) 사용하여 원본 URL을 새 URL에 전달할 수도 있습니다. 예를 들어 원하는대로 사용하십시오.

RewriteRule /pages/(.*) /page.php?page=$1&%{QUERY_STRING} [R] 
+0

감사합니다. 다시 쓰기 규칙이 끝날 때 그 [R]은 무엇입니까? 내 재 작성 규칙 라인이 끝날 무렵에는 그럴 필요가 없습니다. – billmalarky

+0

감사합니다. 위의 내용을 읽은 것을 잊어 버렸기 때문에이 주석을 추가하고 있습니다. 다시 쓰는 규칙의 끝에 [R]은 무엇입니까? 내 재 작성 규칙 라인이 끝날 무렵에는 그럴 필요가 없습니다. – billmalarky

+0

여기에서 가장 좋은 대답입니다. 고마워. – Joshua

11

http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewriterule

"qsappend | QSA"

사용, QSA는 다시 작성하면 mod_rewrite를 제대로 추가 인수를 "병합"확인합니다.

RewriteRule /pages/(.+) /page.php?page=$1 [QSA] 

이렇게하면 사용자가 요청한 내용에 "page = $ 1"이 추가됩니다.

추신. mod_rewrite는 사용자가 지정한 경우 "페이지"를 행복하게 덮어 쓰므로주의해야합니다. 주위에 내가 알지 못한다.

+0

[QSA]가 해결했습니다. example.com/page?language=spanish로 다시 작성되는 스페인어 링크 (example.com/spanish/pagina)를 방문하면 스페인어로 번역 된 페이지 (example.com/page)가 있습니다. 추가로 GET 변수를/spanish/pagina에 추가하려고했는데, ajax를 통해 전송되고 HTML 웹 페이지를 계속 가져 왔습니다. (아약스는 같은 페이지를 호출하지만 생성하는 대신 json 데이터를 보내는 PHP 스크립트 만 실행합니다. html 콘텐츠). 이와 같은 일을하는 사람은 지금 QSA를 사용할 때주의해야합니다. – OzzyTheGiant

관련 문제