2013-09-06 3 views
5

아파치 다시 쓰기를 사용할 때 URL 변경을 숨기려면 어떻게해야합니까? 나는이 문제에 대해 수 시간 동안 수색을 해왔고 그 답을 찾기 위해 여기에 오기로 결정했다. 그래서 어떤 도움/단서도 크게 감사하겠습니다! 지금 내가 사용하고아파치 재 작성을 사용할 때 URL 변경을 숨기는 방법은 무엇입니까?

: 당신이 그것을 작동 http://domain.com/Page/abc123 로 이동 갈 때

RewriteRule ^/Page/(.*)$ http://domain.com/page.cfm?pagevar=$1 [NC,L] 

그의 문제가있다. 하지만 브라우저 URL을 http://domain.com/page.cfm?pagevar=abc123,

으로 바꿉니다. 동일한 작업을 수행하지만 URL로 http://domain.com/Page/abc123을 표시하고 싶습니다.

제발,이 모든 통찰력은 매우 극명하게 될 것입니다! 다시 한번 감사드립니다.

+0

[도움이 된 사용자에게 보상하는 방법, 필요한 경우 질문을 개선하는 방법 및이 웹 사이트를 최대한 활용하는 방법에 대한 유용한 팁을 잊지 마십시오.] (http://stackoverflow.com/about) – Prix

답변

7

첫 번째 규칙은 꽤 URL 형식으로 추악한 URL을 리디렉션합니다.

두 번째 규칙은 사용자가 내부적으로 다시 리디렉션하므로 추한 URL을 볼 수 없습니다.

Options +FollowSymLinks -MultiViews 

RewriteEngine On 
RewriteBase/

# Redirect /page.cfm?pagevar=abc123 to /Page/abc123 
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+page\.cfm\?pagevar=([^&\s]+) [NC] 
RewriteRule^/Page/%1? [R=301,L] 

# Internally forward /Page/abc123 to /page.cfm?pagevar=abc123 
RewriteRule ^Page/(.*)/?$ /page.cfm?pagevar=$1 [QSA,NC,L] 

위의 규칙은 .htaccess 파일을 사용하고 page.cfm.htaccess 파일과 함께 도메인 폴더의 루트에 있다고 가정합니다.

예제와 마찬가지로 제안합니다.

+0

+1, 마지막'RewriteRule'에'QSA' 플래그를 추가하고 싶을 수도 있습니다. – anubhava

+0

@anubhava 고맙겠 습니다만, 나는 그것을 고려하고 있었지만 실제로는 새로운 URL 형식으로 전달 된 쿼리 문자열을 원할 경우에만 적용됩니다. – Prix

+0

예는 동의하지만 이러한 다시 쓰기 요구 사항을 알지 못합니다. 그러나 예 OP는 그러한 요구 사항에 대해서는 언급하지 않았습니다. – anubhava

0

규칙 타겟의 일부인 http://domain.com을 제거해야합니다. 당신이있을 때, implicity 내부적으로 재 작성 대신 브라우저를 리디렉션 :

RewriteRule ^/Page/(.*)$ /page.cfm?pagevar=$1 [NC,L] 
관련 문제