2013-02-28 3 views
0

페이지를로드하기 위해 웹 사이트가 http://domain.tld?p=pagename으로 설정되어 있고 페이지를 http://domain.tld/pagename (사용자를 안내하기가 쉽기 때문에)으로 액세스 가능하게하고 싶습니다.쿼리 문자열을 슬래시로 다시 작성하기

이 내용은 mod_rewrite (.htaccess)으로 처리 될 수 있음을 잘 알고 있지만, 서버 관련 문제는 다소 괴로울 수 있습니다. 이것이 바람직한가요? 그렇다면 어떻게해야합니까? 나는 아파치 configs를 연주 이후하면서

답변

1

이 조금 있었지만 당신은 뭔가를 원하는 -

(I이 그 휴식하고 싶지 않아요. 아, 그리고 홈페이지, 그냥 http://domain.tld에는 쿼리 문자열의 없다) 이 :

첫 번째 부분은 정규식이고 두 번째 부분이 많이와 같은 대체 펄의 s/foo/bar/ 구조에서 찾을 수있다
RewriteEngine on 
RewriteRule ^/([^/])/? ?p=$1 

(그러나 정규식 implementaions 항상 약간 다르기 때문에 물론, 펄에서 약간의 차이가 있습니다) .

([^/])이 만족스럽지 않고 선택 사항이 아니기 때문에 http://domain.tld 또는 http://domain.tld/과 일치하지 않습니다. 정규 표현식의 끝에있는 /?는 쿼리 문자열에 전달되는 다른 매개 변수가있을 경우 위의 내 코드가 반드시 작동하지 않습니다

주 (당신이 그렇게 할 경우) 똑같이 http://domain.tld/pagenamehttp://domain.tld/pagename/을 처리하는 것이지만 그걸 요구하지 않았다 ...

페이지가 추가 쿼리 문자열 매개 변수를 갖기 시작하거나 사용자가 /area/pagename 등을 원할 때 URL 재 작성이 유지 보수하기가 매우 복잡 할 수 있음을 알아야합니다. 이 페이지를 읽는 데 많은 시간을 보내고 있습니다.

http://httpd.apache.org/docs/2.4/mod/mod_rewrite.html

아마도 그럴만 한 가치가 있습니다. 그 질문에 대한 답을 알고 계실 겁니다.

+0

쿼리 문자열에 매개 변수를 추가하는 양식이있는 페이지가 한 개 또는 두 개 있으므로 이상적으로는 너무. 양식을 입수하는 것이 필수적이 아니기 때문에 대신 양식을 게시 할 수 있지만 가능한 경우 가져 오는 것이 좋습니다. 'mod_rewrite'가 어떻게 작동하는지 알아야하지만, 지금은 약간 어렵습니다. – georgewatson

+0

잠깐,'[QSA]'플래그로 처리하겠습니까? – georgewatson

+0

사실 양식을 얻으려면 보통 잘못입니다. GET 요청은 서버에서 상태를 변경하지 않는다는 점에서 "안전"해야합니다. HTTP 스펙은 PUT이 멱등 원 변형 요청 (int REST 아키텍처를 제외하고는 매우 일반적이지 않음)을 지정하고 POST는 상태를 변경하고 동일한 제출 된 데이터에 대해 다른 효과를 줄 수 있음을 지정합니다 (예 : 신용 카드 청구 반복 낮은 은행 잔고 :)). '[QSA]'는 매개 변수를 보존하고 싶지만'http : //example.com/foo? a = b' ==>'http://example.com/?p=에주의하십시오. foo? a = b' – Gus

관련 문제