2010-05-20 4 views
12

앵커 태그 (#) HTML로 URL을 다시 작성 htaccess로 사용 방법 :나는 다음과 같은 URL 먹고 싶어 나는 상황이

/1/존

을하고 아파치의 htaccess로 파일을 사용하여 리디렉션이를 = 존 # 존은 존의 이름을 가진 HTML 앵커로 이동되도록

/page.php?id=1 & 이름으로 이동합니다.

특수 문자를 이스케이프하고 리디렉션에서 # 기호를 무시하도록 [NE] 플래그를 추가하는 방법에 대한 많은 참조가 있지만 작동하지 않습니다. 예를 들어 [NE, R]을 추가하면 브라우저 주소에 URL이 원래대로 표시됩니다 (http://example.com/page.php?id=1&name=john#john).

답변

0

내부 앵커를 리디렉션 할 수 없습니다. (그냥 생각해 보라. 아파치가 앵커에게 어떻게 스크롤 하는가?) 링크는 /1/john#john을 가리켜 야한다. 앵커는 요청 URI의 일부가 아닙니다.

+0

저는 이것을 실제로 확인하고 있으며 귀하가 정확하다고 생각합니다. 브라우저는 앵커를 해석하고 페이지의 정확한 지점으로 스크롤합니다. 아파치 리디렉션은 리다이렉트 된 URI가 브라우저에 전달되지 않기 때문에이를 수행 할 수 없습니다. –

2

URL 재 작성 또는 더 구체적으로 URL 미화로 원하는 것을 수행 할 수 있습니다.

I just quickly found this well explained blog post for you, learning to rewrite URLs-part으로 도와 드릴 수 있기를 바랍니다.

# (현재 내가 무슨 말을하고 있는지 알고있을 것으로 예상 함) 동일한 변수를 다시 작성한 URL에 두 번 전달할 때 문제가 발생하지 않습니다. 마찬가지로 : BTW

RewriteRule ^([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)$ /$1/$2/\%23$2 [R,NE] 

:

RewriteRule ^([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)$ /$1/$2/#$2 [R] 
RewriteRule ^([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/$ /index.php?page=$1&subpage=$2 

비록, 당신이이 방법을 수행 할 수 있음을 it seems# part의 탈출, 그리고 것 (첫 번째 줄의 마지막 부분을주의) , URL 재 작성은 이 아니며 (전문가가 아니기 때문에) 복잡하지만 복잡해 질 수 있습니다. 그러나 Google은 많은 도움을 줄 수 있습니다.

+0

안녕하세요, Sune, 응답 해 주셔서 감사합니다. 그러나 나는하려고하는 것이 가능하다고 생각하지 않습니다. nikc에서이 페이지에 대한 응답을보십시오. –

19

[NE] 플래그 (noescape)을 사용하여 가능합니다.

기본적으로 & 및?과 같은 특수 문자는 해당하는 16 진수 코드로 변환됩니다. [NE] 플래그를 사용하면 발생하지 않습니다.

당신은 사실이 두 가지 중 하나가 아니라 작업을 수행 할 수 있습니다 http://httpd.apache.org/docs/2.2/rewrite/flags.html#flag_ne

4

더 많은 정보를 원하시면.

[NE] 플래그를 사용하여 '#'문자를 이스케이프하지 않도록 Apache에 알릴 수 있지만 리디렉션이 작동하려면 단순히 상대 페이지가 아닌 리디렉션 할 절대 URL을 지정해야합니다. 아파치는 창을 앵커로 스크롤하는 것을 할 수 없습니다. 그러나 절대 URL로 리디렉션하면 브라우저가 작동합니다.

+1

+1 맞습니다. 브라우저가 할 것입니다. –

+1

원래의 포스터 :이 문제를 해결하기 위해 올바른 답을 표시하십시오. –

+0

Hmm .. Apache 2.4.25에서는 상대 페이지를 지정하고 앵커 태그에 대한 외부 리디렉션을 계속 가져옵니다. 2013 년 이후로 상황이 바뀌었을 까? 섹션에서'RewriteBase "/"'RewriteRule^services /? $ #services [L, R = 301, NE] 섹션에서 나를 위해 일하고있다. https로 변환 할 때 규칙을 다시 수행 할 필요가 없다면 어떤 점이 좋을까요? –