경기 질문 마크에서는 mod_rewrite 규칙 regex
-
03-07-2019 - |
문제
내가 찾는 url 을 다시 쓰도록 여러 하위 문자열.하나는 부분이 요청 하위 디렉터리로는 동안,다른 요청은 정상적으로 쿼리 문자열을 매개 변수입니다.
예를 들어,내가 다시 작성하는 url 에서
http://www.mysite.com/mark/friends?page=2
하기
http://www.mysite.com/friends.php?user=mark&page=2
나는 이러한 목표를 달성 할 수을 제외의 질문에 표시 문자입니다.여기에 내 재작성 규칙:
...
RewriteEngine On
RewriteBase /
RewriteRule ^([A-Za-z0-9-_]+)/friends[?]?([^/\.]+)?$ friends.php?user=$1&$2 [L]
변경하는 경우 이 질문을 표시하여 다른 문자들은 그것은 위대한 작동합니다.인 문제는'?'문자가 잘못 해석의 시작으로 새로운 query string.
내가 전달해야에서 모든 매개변수 이후에 나타나는 사용자 친구 같은 것입니다.나는이를 어떻게?
해결책
당신은 그것을 사용해야합니다 [QSA]
쿼리 문자열을 다시 작성하는 대신 플래그. [QSA]
쿼리 문자열을 다시 작성한 URL로 전달합니다.
따라서 규칙은 다음과 같습니다.
...
RewriteEngine On
RewriteBase /
RewriteRule ^([A-Za-z0-9-_]+)/friends/? friends.php?user=$1 [QSA,L]
귀하의 경우는 매우 유사합니다 mod_rewrite cookbook에서 QSA 플래그 사용에 대한 예제.
다른 팁
이 쿼리하지 않은 부분의 URL 경로에 따라서 처리할 수 없으로 RewriteRule
지시어.이 할 수 있습니다진 RewriteCond
지시어(참조하십시오 %{QUERY_STRING}
).
지 드로 자작나 이미 말 기에 충분 일정 QSA
플래그 자동으로 원래 요청한 쿼리를 추가하는 새로운 URL.
다시 쓰기 플래그 QSA를 사용하는 것 외에도 다음과 같이 query_string 환경 변수를 사용할 수도 있습니다.
RewriteEngine On
RewriteBase /
RewriteRule ^([A-Za-z0-9-_]+)/friends$ /friends.php?user=$1&%{QUERY_STRING}
그리고 문제의 URL
http://www.example.com/mark/friends?page=2
(지정된대로)로 다시 작성됩니다.
http://www.example.com/friends.php?user=mark&page=2
제휴하지 않습니다 StackOverflow