2012-02-04 2 views
2

ColdFusion 8.0.1 및 jQuery 1.4.3을 사용하고 있습니다.URL을 소문자로 다시 쓰고 서버에서 이중 히트하지 않는 방법은 무엇입니까?

jQuery를 사용하여 CFC에 Ajax 요청을하는 코드를 개발 중입니다. 나는 내가 만든 각 Ajax 요청이 실제로 서버에 두 번 제출되었다는 것을 알아 차렸다. (나는 Firebug에서 이것을 관찰했다.) 첫 번째 히트는 소문자로 강요되었다. 두 번째 히트는 현재 소문자로 작성되어 재 작성으로 인해 실패했습니다.

나는 상사에게 그것에 대해 물었고 application.cfm 파일의 일부 코드에서 URL을 모두 소문자로 설정 한 다음 CFHEADER를 사용하여 301 리디렉션을 수행했다고 지적했습니다. 나는 그 코드와 나의 Ajax 요청이 잘 작동한다고 해명했다.

여전히 SEO 목적을 위해 application.cfm 또는 in htaccess 파일의 다시 쓰기를 사용하여 모든 요청을 소문자로 강제해야합니다.

필자는 htaccess 파일에서이 유형의 기능을 수행하는 것이 더 좋습니다.

제 질문은 실제로 htaccess 파일을 사용하여 URL 재 작성이 CFHEADER처럼 실제로 페이지를 두 번로드하는지 여부입니다. 저는 월요일까지이 코드를 사용할 수 없습니다. 옵션과 최상의 대답을 알고 싶습니다.

RewriteEngine On 
RewriteMap lc int:tolower 
RewriteCond %{REQUEST_URI} [A-Z] 
RewriteRule (.*) ${lc:$1} [R=301,L] 

RewriteEngine On 
RewriteMap lowercase int:tolower 
RewriteCond $1 [A-Z] 
RewriteRule ^/(.*)$ /${lowercase:$1} [R=303,L] 

도움 주셔서 감사합니다.

+2

리디렉션을하는 경우 두 가지 요청이 있습니다. 네가 묻고있는거야? 리디렉션의 요점은 브라우저가 다른 URL에서 다른 요청을하도록 지시하는 것입니다. – Pointy

+0

이중 히트를 방지하기위한 모든 종류의 작업은 사용자가 원하는 모든 URL에 대해 모니터하고 사용하는 클라이언트에 대해 일종의 플러그 인을 작성해야합니다.그리고 그 종류의 서버 기반 변경은 어떤 양식의 리다이렉트를 요구할 것이고, @ Pointy가 말했듯이, 그것은 항상 두 개의 요청이 될 것입니다. – Drahkar

답변

1

Evik의 경우에 대문자가있는 경우 리디렉션 을 받게됩니다. 따라서 AJAX 요청 URL이 전적으로 사용자의 제어 범위 내에있는 경우 모두 소문자 여야합니다.

이 외에도, 대안으로 RewriteRule에 일부 RewriteCond를 넣어서 AJAX 요청에 대해 리디렉션이 발생하지 않도록 할 수 있습니다. 이것들은 SEO 목적을위한 수정이 필요한 일종의 요청이 아니므로 단순히 그대로 두는 것이 가장 좋습니다.

+0

이 프로젝트의 컨트롤이 제한되어 있기 때문에 대답의 첫 번째 단락은 실제로 적용되지 않습니다. 대답의 후반부가 머리에 못을 박은 다. 나는 이것을 함께 전달할 것이다. 감사!!! –

0

Google 애널리틱스를 사용하는 경우 계정 설정 btw에서 모든 통계를 대문자 또는 소문자로 기록하도록 설정할 수 있습니다. 비슷한 일을하지만 GA 코드에서 정규화 된 정규식을 사용합니다.

+1

Thes는 통계에 관한 것이 아니라 요청 된 URL과 URL 간의 일관성을 유지하므로 검색 엔진에서 올바르게 색인을 생성합니다. –

1

아니요, 서버를 두 번 누르지 않으면 요청하는 URL이 변경 (다시 쓰기)됩니다. 그 이유는, my last question에서, 서버를 더블 클릭해야 할 때, .htaccess만으로는 그것을 할 수 없었고 PHP 헤더에 의존해야했습니다.

편집 : 서버를 두 번 치면 스크립트를 실행하고 페이지를로드한다는 의미입니다. .htaccess를 사용하여 URL을 다시 작성하면 원하는 효과가 나타납니다. 모든 다시 쓰기 조건이 충족 될 때까지 브라우저에 아무 것도 반환하지 않으며, URL을 리디렉션하지 않고 방금 다시 씁니다. 그것.

를 소문자로 문자열을 변환합니다이

ajax_url = 'http://ExaMple.CoM'; 
ajax_url = ajax_url.toLowerCase(); 

처럼 실행, 뭔가를 Ajax 요청을 보내기 전에, 그것은 자바 스크립트에있을 것입니다 할 수있는 다른 방법.

+0

정보 주셔서 감사합니다. 나는 이런 식으로 내 요청을하지 않을거야. 문제는 내가 통제 할 수있는 것보다 나무 위로 올라간다. 문제를 해결하는 방법에 대한 조언이 필요했습니다. 귀하의 예를 들어 조언이지만, 그것은 여러 가지 이유로 내 문제를 해결하지 못할 것이다. 감사! –

관련 문제