2012-11-08 4 views
0

나는 많은 사이트를 보았지만 이것을 설명하는 안내서를 찾지 못했습니다. 나는 그것은 을 site.com/profile.php?id=1하는 site.com/user/1 리디렉션이 htaccess로 코드URL을 리디렉션하고 주소 표시 줄에 짧은 URL을 표시합니다.

Options +FollowSymLinks 
RewriteEngine On 
RewriteRule ^users/(\d+)*$ ./profile.php?id=$1 

을 가지고 있지만, 리디렉션을 때 나는 그의 ADRESS 줄에 볼 수있는 사용자가 원하는 단축 URL (site.com/user/1)

어떻게해야합니까?

답변

1

재 작성 즉 주소 표시 줄에 표시되는 긴 URL에 대한 요청 브라우저 서버의 내부 논리이며, HTTP 서버는 하나의 짧은에 전달. 브라우저에 더 짧은 URL을 표시하려면 Rewrite 대신 Redirect을 사용해야합니다.

리디렉션을 사용하면 서버가 브라우저에 리디렉션 응답을 반환하고 페이지를 다시 요청하기 때문에 페이지로드가 느려집니다.

RewriteRule <pattern_A> <target_B> 

항상 <target_B>-<pattern_A>에서 작품은, 결코 다른 방법으로 주위에는이 규정에 의한 2 개 요청의 "연결"없다 그것은 : 같은

+0

고마워, 그래서'Redirect^users/(\ d +) * $ ./profile.php? id = $ 1'? 그리고 그것을 '안에 넣을까요? – Dotan

+0

어떤 서버를 사용하고 있습니까? Apache입니까? 그렇다면 사용해야하는 지시어는'RedirectMatch'입니다. 모듈'mod_rewrite'와는 더 이상 상관이 없으므로 조건절 안에 넣을 필요가 없습니다. – onon15

+0

예, apache. 방금'RedirectMatch art /(.*) /article.php?a = $ 1' 그리고 다시 전체 주소로 리디렉션하고 주소 표시 줄의 주소를 변경합니다. 서버의 아파치 설정과 관련이있을 수 있습니까? 도와 주셔서 감사합니다 – Dotan

0

규칙이 작동합니다. top part of this answer은 "다른 URL에 대해 URL이 변경 될 때"발생하는 2 가지 다른 문제를 해결합니다.

규칙은 쿼리 문자열없이 URL을 사용하고 내부적으로 쿼리 문자열을 사용하여 PHP 파일로 다시 작성합니다. 브라우저는 이런 일이 일어나지 않는다는 것을 알지 못합니다. "뒤에서"입니다. 검색 주소창에 검색어 문자열이없는 URL이 표시되도록하려면 먼저 다른 URL로 이동해야하며 "다른 URL"은 외부에서 브라우저를 리디렉션해야합니다.

요청 문자열,하지 (URL을 처리 파이프 라인과 재 작성 엔진에 따라 변경됩니다) 요청 URI에 대해 일치
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /profile\.php\?id=([^&\ ]+) 
RewriteRule^/users/%1? [L,R=301] 

, ID를 추출하고 가 리디렉션 : 그래서 당신이 이미 가지고있는 규칙에 따라 브라우저R=301 플래그를 사용하여 쿼리 문자열없이 새 URL에 추가하십시오. 그들은 대신 내부적 원래 URL로 다시 를 재 작성, 브라우저를 리디렉션의 매우 복잡하고 비효율적 인 방법에 의존 청소기 찾고 URL을 사용하도록

당신은 정말 을 변경 콘텐츠의 모든해야합니다.

관련 문제